見出し画像

SQLで「= NULL」としないのは3値論理だからだってさ

こんにちは。SESエンジニアの つくねん。です。
SQLでNULLを検索するときに
「= NULL」と書いてはいけない。代わりに「IS NULL」を使う。
というのはSQLの使い始めに必ず学ぶと思います。
私も、そういうもんだから。という公式として覚えていたのですが
他人に理由を聞かれた際にうまく答えられないのが歯痒かったので
簡単に調べてみました。

SQLでは使う値が3種類ある

多くのプログラミング言語の真偽値は
「TRUE」,「FALSE」の2種類の値というのが基本です。

これに対してSQLでは
「TRUE」,「FALSE」の2種類に加えて「UNKNOWN」
という値が存在します。(3値論理)

なぜ、「UNKNOWN」なるものが存在しているのかというと
NULLがあるから。ということでした。

真偽を判断する比較をイメージします。
1 = 1 であれば TRUE
1 = 10 であれば FALSE
ですが
1 = NULLとしたときには
そもそも比較できない状態になります。
これはNULLが値でも値を代入した変数でもないからです。

このときSQLでは
そもそも比較にならないよ
ということで「UNKNOWN」という値を返します。
式で比較できるのはあくまでも値と値か値と変数(値)
なのでNULLと値は比較できません。

そんなNULLのために
「=」ではなく特別な「IS NULL」「IS NOT NULL」が使われているわけですね。

おわりに

今回調べてみて「=」で書かないという違和感が解消されました。
そもそもなんで違和感があったのかは
比較の「=」を見たときに頭の中で勝手に「カラム値が〇〇である」
と言葉として変換されていたからかなと思いました。
(カラム値が1である。と、カラム値がNULLである。みたいな感じに。)
比較の式としてみれば確かに納得です。




この記事が気に入ったらサポートをしてみませんか?