NULLの3値論理

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問)

  1. 「x以外(NULLも含む)」を正しく抽出する
  2. NULLを空文字として扱って比較する(COALESCE(col, '') <> 'x' など)

次に読む

タイトルとURLをコピーしました