SQL ServerのINは内部でORにバラされる
IN句にNULLを入れると内部で列 = NULLという判定になってしまう
code:自分で書いたsql
(略) WHERE test_flag IN (1, 2, 3);
code:実行計画.sql
test_flag = 1
OR test_flag = 2
OR test_flag = 3
結果がNULLを許容する列の場合、注意
ANSI_NULLSに頼らず、きちんとNULLは対応した方が良い
IN句の挙動はどうやって確認できる?
実行計画で確認できた
以下のクエリの実行計画を取得してみた
code:sql
SELECT id, name, test_flag FROM SAMPLE_TABLE WHERE test_flag IN (1, 2, 3);
それっぽい実行計画があった
code:実行計画.xml
<ScalarOperator ScalarString="
そもそもNULLを何とかする