SQL Server 2008でのUNION SELECTステートメントの結果には、どちらのソーステーブルにも存在しないレコードが含まれています。例:
theidは、各ソース表内の整数ID値です。いずれの表にも277741のid値は含まれていません。
Select *
From DataTable1
WHere theid = 277741
-- 0 records returned
Select *
From DataTable2
Where theid = 277741
-- 0 records returned
ただし、以下のUnion Selectステートメントを実行すると、theidのレコードが生成されます。
Select *
Into ConjoinedData
From DataTable1
Union
Select *
From DataTable2
Where theid Not In (Select theid From DataTable1)
Select
From ConjoinedData
Where theid = 27741
-- 1 record returned
theidフィールドはいずれかのソーステーブルのIDフィールドではありません。最終的に、DataTable1とDataTable2のデータは、ID 277741の無関係のレコードを含む同じ親から取得されました。ただし、いずれかのソーステーブルの外部キー関係やその他のテーブルは存在しません。私は、成功していないUnion Allクエリに変更しようとしました。ソーステーブルの両方でtheidのインデックスを作成し、 'created'レコードが表示されます。私は無駄にソーステーブルを何度もドロップして再作成しました。なぜSQL Serverは切断された親テーブルから関連のないレコードを取得しますか(ソースタルブはどちらもSelect..Intoステートメントを使用して同じ親から列挙され、どちらのテーブルにも親に戻ることはありません)