TRY THIS ONE: I tried to get both sets of results.
DECLARE @T1 TABLE ( ID1 VARCHAR(2) ,XXX INT, FIELDA VARCHAR(2) ) DECLARE @T2 TABLE ( ID2 VARCHAR(2) ,XXX INT, FIELDB VARCHAR(2) ) INSERT INTO @T1 VALUES ('a', 1, 'X'), ('b', 2, 'Y'), ('c', 3, 'Z') INSERT INTO @T2 VALUES ('d', 2, 'k'), ('e', 3, 'j'), ('f', 4, 'h') SELECT ISNULL(CONVERT(VARCHAR(1),T1.xxx),' ') AS [T1.xxx] , ISNULL(CONVERT(VARCHAR(1),T2.xxx),'') AS [T2.xxx] , ISNULL(fieldA,'') AS [fieldA], ISNULL(fieldB,'') AS [fieldB] , ISNULL(ID1,'') AS [ID1] , ISNULL(ID2,'') AS [ID2] FROM ( SELECT XXX as XXX1 FROM @T1 UNION SELECT XXX as XXX1 FROM @T2 )T LEFT OUTER JOIN @T1 T1 ON T.XXX1 = T1.XXX LEFT OUTER JOIN @T2 T2 ON T.XXX1 = T2.XXX
---------------------- RESULT ------------------
T1.xxx T2.xxx ID1 ID2 fieldA fieldB 1 a X 2 2 bd Y k 3 3 ce Z j 4 fh
SELECT ISNULL(CONVERT(VARCHAR(1),T.xxx1),' ') AS [xxx] , ISNULL(ID1,'') AS [ID1] , ISNULL(ID2,'') AS [ID2], ISNULL(fieldA,'') AS [fieldA], ISNULL(fieldB,'') AS [fieldB] FROM ( SELECT XXX as XXX1 FROM @T1 UNION SELECT XXX as XXX1 FROM @T2 )T LEFT OUTER JOIN @T1 T1 ON T.XXX1 = T1.XXX LEFT OUTER JOIN @T2 T2 ON T.XXX1 = T2.XXX
---------------------- RESULT ------------------
xxx ID1 ID2 fieldA fieldB 1 a X 2 bd Y k 3 ce Z j 4 fh