メインコンテンツへ
データベースNULL値の扱い(3値論理)

SQL における NULL 値の比較について、次の条件式の評価結果として正しいものはどれか。 ```sql SELECT CASE WHEN NULL = NULL THEN 'TRUE' WHEN NULL <> NULL THEN 'FALSE' ELSE 'UNKNOWN' END; ```

ア.TRUE
イ.FALSE
ウ.実行時エラーになる
エ.UNKNOWN正解

解説

SQL の NULL は「答えが不明な謎の箱」。謎の箱と謎の箱が同じかどうか聞いても「分からない(UNKNOWN)」としか言えない。NULL = NULL は TRUE でも FALSE でもなく UNKNOWN。これが SQL の3値論理(TRUE/FALSE/UNKNOWN)の核心。

なぜ エ が正解か

SQL では NULL は「値が不明」を表すため、NULL との比較は常に UNKNOWN を返す。NULL = NULL も FALSE ではなく UNKNOWN。NULL <> NULL も UNKNOWN。したがって WHEN 節がすべて UNKNOWN(非真)となり、ELSE 節が実行されて UNKNOWN が返される。NULL の判定には IS NULL または IS NOT NULL を使う必要がある。

なぜ ア は間違いか

`NULL = NULL` は TRUE を返さない。数値の等価比較と混同した誤り。NULL は「値が不明」であり、不明なもの同士が等しいとは判断できない。

なぜ イ は間違いか

`NULL <> NULL` は FALSE を返さない。NULL との比較はすべて UNKNOWN となる。3値論理の概念を理解していない誤り。

なぜ ウ は間違いか

NULL との比較は SQL の仕様上エラーにはならない。UNKNOWN という第三の論理値として扱われる。実行時エラーとなるのは除算ゼロや型変換失敗など別のケース。

出典: AI生成問題(学習用)