SQL Serverの一部のデータをクリーンアップし、2つのテーブルの間に外部キーを追加しようとしています。
削除したいテーブルの1つに孤立した行が大量にあります。次のクエリがMSSQLサーバーで0行を返す理由がわかりません。
-このクエリは行を返しません
select * from tbl_A where ID not in(select different ID from tbl_B)
サブクエリにISNOTNULLを含めると、期待どおりの結果が得られます。
--tbl_Aにはあるが、tbl_Bにはないすべてのレコードを含む行が返されます
select * from tbl_A where ID not in(select * from tbl_B where ID is not null)
ID列はNULL可能であり、NULL値が含まれています。サブクエリだけを実行すると、最初のクエリが期待どおりに1つの余分なNULL行を返すことを除いて、まったく同じ結果が得られます。