CLOSE DATA ALL SET ENGINEBEHAVIOR 90 CREATE CURSOR crsTest (badge int) INSERT INTO crsTest VALUES (1) INSERT INTO crsTest VALUES (2) INSERT INTO crsTest VALUES (3) CREATE CURSOR crsHR (badge int, Name C(20)) INSERT INTO crsHR VALUES (1, 'Guy 1') INSERT INTO crsHR VALUES (2, 'Guy 2') CREATE CURSOR crsContr (badge int, Name C(20), NOTES M) INSERT INTO crsContr VALUES (1, 'Guy 1',[1]) INSERT INTO crsContr VALUES (3, 'Guy 3',[2]) SELECT crsTest.badge, Tbl1.Name, Tbl1.Notes; FROM crsTest; INNER JOIN (SELECT Tbl1.badge, Tbl1.Name, NVL(crsContr.Notes,CAST([] AS M)) AS Notes; FROM (SELECT badge, Name FROM crsHR; UNION; SELECT badge, Name FROM crsContr) Tbl1; LEFT JOIN crsContr ON Tbl1.badge = crsContr.Badge) Tbl1; ON crsTest.badge = Tbl1.badgeNUT keep in mine that IF you have exact the same guy in H system and Contracts table and He/She is filtered by UNION you could get no NOTES field!