NULL は missing または unknown value を表します。zero でも empty string でもなく、値が存在しないことです。NULL は comparison、aggregates、logic で特別かつ時に意外な振る舞いをするため、bug の原因になりやすいです。
NULL は "unknown" — NULL との comparison
sql
email
email
email
email
NULL は missing または unknown value を表します。zero でも empty string でもなく、値が存在しないことです。NULL は comparison、aggregates、logic で特別かつ時に意外な振る舞いをするため、bug の原因になりやすいです。
email
email
email
email
NULL は "unknown" なので、NULL との comparison は "unknown" になり true にはなりません。= NULL は match しません。必ず IS NULL / IS NOT NULL を使います。
SQL は TRUE, FALSE, UNKNOWN (NULL) の three-valued logic を使う。
NULL = NULL → UNKNOWN (true ではない)
NULL AND true → UNKNOWN
NULL OR true → TRUE
NOT NULL → UNKNOWN
→ WHERE で UNKNOWN になった conditions は match しない扱い。
-- aggregates は NULL を無視する(COUNT(*) を除く)
SELECT AVG(salary) FROM employees; -- non-NULL salaries だけで平均
SELECT COUNT(salary) FROM employees; -- non-NULL のみ count(COUNT(*) は all rows)
-- NULL を含む arithmetic → NULL
SELECT price + NULL; -- NULL
Aggregates は NULL を skip し、NULL を含む arithmetic は NULL になります。
-- COALESCE — first non-NULL value を返す(default を提供)
SELECT COALESCE(phone, 'No phone') FROM users;
SELECT COALESCE(nickname, name, 'Unknown') FROM users;
-- NULLIF — 2 つの値が等しい場合 NULL を返す
SELECT NULLIF(value, 0); -- value が 0 なら NULL(divide-by-zero 回避など)
NULL は real data で頻繁に現れます(optional fields、missing values、LEFT JOIN の non-match など)。特に col = NULL が何も返さない問題は非常によくある bug です。
three-valued logic、aggregates が NULL を無視すること、arithmetic with NULL が NULL になること、COALESCE / NULLIF の使い方を理解すると、NULL による subtle bugs を避けられます。