NULLの3値論理でWHEREが外れる理由(= / <> が通じないケース)
この記事で分かること
- NULLが「値」ではなく「不明」である感覚がつかめる
WHERE col <> 'x'に NULL が含まれない理由(3値論理)を説明できるIS NULL/COALESCE/OR col IS NULLを使い分けられる
結論:NULLは比較するとUNKNOWNになり得る
SQLの条件式は TRUE /
FALSE だけではなく、UNKNOWN(不明)があります。WHEREは TRUE の行だけを残すため、UNKNOWNは落ちます。
最小例(この挙動を覚える)
-- NULLを探す
SELECT *
FROM t
WHERE col IS NULL;
-- 「x以外」には、NULLは含まれない(NULLは不明扱い)
SELECT *
FROM t
WHERE col <> 'x';
-- NULLも含めて「x以外」にしたいなら、明示的にORする
SELECT *
FROM t
WHERE col <> 'x' OR col IS NULL;
よくあるミス
= NULLを書く(正しくはIS NULL)- NULLを含む列で
NOT INを使って事故る(EXISTS/NOT EXISTSを検討)
練習問題(2問)
- 「x以外(NULLも含む)」を正しく抽出する
- NULLを空文字として扱って比較する(
COALESCE(col, '') <> 'x'など)
