[メモ] SQLにおけるNULLを含むカラムとの比較
概要
SQLにおいて、NULLを含む項目との比較が分かりずらい かつ よく忘れてしまうので整理する。
一覧表
a = b
NULLは不明な値として扱われるため、比較結果もNULLになる。
| 項目a \ 項目b | ’text’ | 1 | NULL |
|---|---|---|---|
| ’test’ | TRUE | FALSE | NULL |
| NULL | NULL | NULL | NULL |
a <> b
a = bと同様に、NULLを不明値扱いとしている。
| 項目a \ 項目b | ’text’ | 1 | NULL |
|---|---|---|---|
| ’test’ | FALSE | TRUE | NULL |
| NULL | NULL | NULL | NULL |
a IS DISTINCT FROM b
a <> bに対応する、NULLの通常値扱い版
| 項目a \ 項目b | ’text’ | 1 | NULL |
|---|---|---|---|
| ’test’ | FALSE | TRUE | TRUE |
| NULL | TRUE | TRUE | FALSE |
a IS NOT DISTINCT FROM b
a = bに対応する、NULLの通常値扱い版
| 項目a \ 項目b | ’text’ | 1 | NULL |
|---|---|---|---|
| ’test’ | TRUE | FALSE | FALSE |
| NULL | FALSE | FALSE | TRUE |
参考
- SQLでNULLとの比較結果をTRUE/FALSEにしたいときはIS DISTINCT FROM演算子を使う #PostgreSQL - Qiita @ Fri Mar 13 2026 17:58:55
- 9.2. 比較関数および演算子 @ Sat Mar 14 2026 22:31:15
メモ
SQLで困ったら、大体PostgreSQLのドキュメントを見れば解決するような気がする。
日本語でちゃんと整理されていて、標準SQLかどうかも分かるように書かれていることが多いので、他のDB使っているときも参考になる。AIさんがあるので、昔ほどは見なくなったけども。