You sure you wouldn't rather tell the whole story of everything that doesn't have a match??? 
--===== Create some test tables with data provided in the post-- DROP TABLE TableA-- GOCREATE TABLE TableA (SomeID INT PRIMARY KEY CLUSTERED, Region VARCHAR(10), [ID] VARCHAR(4))INSERT INTO TableA (SomeID, Region, [ID]) SELECT '1','RegionA','ID1' UNION ALL SELECT '2','RegionA','ID2' UNION ALL SELECT '3','RegionA','ID3' UNION ALL SELECT '4','RegionA','ID4' UNION ALL SELECT '5','RegionA','ID5' UNION ALL SELECT '6','RegionB','ID1' UNION ALL SELECT '7','RegionB','ID2' UNION ALL SELECT '8','RegionB','ID3' UNION ALL SELECT '9','RegionB','ID4'GO-- DROP TABLE TableB-- GOCREATE TABLE TableB (SomeID INT, Component VARCHAR(10))INSERT INTO TableB (SomeID, Component) SELECT '1','Comp1' UNION ALL SELECT '1','Comp2' UNION ALL SELECT '2','Comp1' UNION ALL SELECT '2','Comp5' UNION ALL SELECT '3','Comp1' UNION ALL SELECT '6','Comp1' UNION ALL SELECT '6','Comp2' UNION ALL SELECT '7','Comp1' UNION ALL SELECT '8','Comp1' UNION ALL SELECT '8','Comp2'GO--===== Show everything present on one side that is not in the other -- or may be missing an individual piece of information SELECT da.SomeID AS aSomeID, da.Region AS aRegion, da.ID AS aID, da.Component AS aComponent, db.SomeID AS bSomeID, db.Region AS bRegion, db.ID AS bID, db.Component AS bComponent FROM ( SELECT ta.SomeID,ta.Region,ta.ID,tb.Component FROM TableA ta LEFT OUTER JOIN TableB tb ON ta.SomeID = tb.SomeID WHERE ta.Region = 'RegionA' )da FULL OUTER JOIN ( SELECT ta.SomeID,ta.Region,ta.ID,tb.Component FROM TableA ta LEFT OUTER JOIN TableB tb ON ta.SomeID = tb.SomeID WHERE ta.Region = 'RegionB' )db ON da.ID = db.ID AND da.Component = db.Component WHERE da.Component IS NULL OR db.Component IS NULL ORDER BY da.ID,db.ID
--Jeff Moden