MariaDB
NULLの場合も検索結果に上がってほしい場合は、COALESCE()かます必要あり。
test_valがNULLのレコードも検索結果に上がる
SELECT * FROM tester
WHERE COALESCE(test_val, '') NOT IN ('1','2')
こう書くとtest_valがNULLのレコードは検索結果に上がってこない
SELECT * FROM tester
WHERE test_val NOT IN ('1','2')
test_valがNULLのレコードは値が『1』でも『2』でもないから検索結果に上がってくるだろう
と思ってるとダメ。
Access
MariaDBと同様。
NULL置換関数をかませるかどうかで結果が変わる。
test_valがNULLのレコードも検索結果に上がる
SELECT * FROM tester
WHERE Nz(test_val, '') NOT IN ('1','2')
こう書くとtest_valがNULLのレコードは検索結果に上がってこない
SELECT * FROM tester
WHERE test_val NOT IN ('1','2')
バージョン
Windows 10 Pro 21H2 OSビルド 19044.1889
Microsoft Access for Microsoft 365 MSO (バージョン 2207 ビルド 16.0.15427.20166) 32 ビット
10.5.4-MariaDB
TODO:Oracleの場合もMariaDBとか同じ挙動。だけどCOALESCE(カラム名,'')の戻り値がNULLになっちゃうので、そのへんを調べた上で結果まとめる。