「NULLは闇」説を検証してみた:哲学的NULL問題の正体に迫る

SQL界隈で時折ささやかれる言葉がある。
それは――「NULLは闇だ」

この一見ジョークのような言葉、実はデータベースにおいてかなり深刻な問題を内包している。
この記事では「NULL」の哲学的な正体、そしてなぜエンジニアたちがNULLに恐怖すら覚えるのか、その理由を探っていこう。


NULLとは何か? それは「存在しないこと」の存在

まずNULLの定義から振り返ろう。
SQLにおけるNULLは、「値が存在しないことを示す特別なマーカー」だ。これは0でも空文字でもfalseでもなく、**「わからない」「定義されていない」**という意味。

つまりNULLとは「何かがある」わけではなく、「あるかどうかもわからない」状態なのだ。
これ、哲学的に言えば**“非存在の存在”**という非常に厄介な概念。


NULLの怖さ①:三値論理の罠

通常の論理演算(AND, OR, NOT)は、true/falseの2値で完結する。しかしSQLではNULLを含むと、そこに第3の値が現れる。
それが UNKNOWN(不明) だ。

例えば以下のような式:

SELECT * FROM users WHERE age > 18;

ここで age が NULL のレコードはどうなるか?
答えは 除外される。なぜなら NULL > 18 は true でも false でもなく、「比較不能=UNKNOWN」だからだ。

つまり、条件式にNULLが絡むと、真か偽かすらわからないという状態に陥る。


NULLの怖さ②:比較ができない、ソートも罠

もうひとつNULLの闇が深いのは、「NULLはNULLとすら等しくない」点だ。

SELECT * FROM table WHERE column = NULL;

これは一見、NULLを含む行を取得できそうだが、何も返らない
正しくは IS NULL を使わなければならない。

また、ORDER BYでソートした場合、NULLの位置(先か後か)もRDBMSによって挙動が異なる。PostgreSQLでは NULLS FIRST / NULLS LAST が指定できるが、MySQLではバージョンや設定によって変わる。

つまりNULLは、比較できず、等価でもなく、順序もあいまい。もはや「暗黒物質」と呼ぶにふさわしい存在である。


NULLの哲学:それは「知らないことを知っている」状態

NULLは一種のメタ情報だ。
「この値は、ないのではなく、“わからない”」と明示している。

たとえば、あるユーザーの birth_date がNULLなら、それは「まだ入力されていない」のか「生年月日が非公開」なのか「そもそも存在しない」なのか、理由は不明だ。

つまりNULLは「わからない理由すらわからない」ことを示す、認識の限界に立つ存在なのである。

これ、ソクラテスが言った「自分が無知であると知っている人間が最も賢い」というやつに近くないだろうか?


NULLの取り扱い:設計者は“前提”を明示せよ

NULLを完全に避けるのは難しいが、影響を最小限に抑えるためには明示的な設計が必要だ。

  • フィールドにNOT NULL制約をつける
  • NULLの意味を仕様で定義する(例:未入力 vs 不明 vs 該当なし)
  • WHERE句では IS NULL / IS NOT NULL を忘れない
  • COUNTやAVGなどの集計関数はNULLを除外するので注意

NULLがあるとJOINの結果が想定外になることも多い。
つまり、NULLは設計者の想像力を試すテストでもある


結論:「NULLは闇」だが、避けることはできない

NULLはただの欠損値ではない。それは、
**「データに対して“知らない”という知性を持つシステム」**の現れである。

だからこそ、雑に扱えば設計は崩壊するし、きちんと向き合えば設計の質を引き上げてくれる存在でもある。

NULLを怖がるな。ただし、尊重しろ。


システム開発なんでもパートナー
システム開発なんでもパートナー

この記事を書いた人