SQLのNULLとは何か:空文字や0との違い

入門 | 10分 で読める | 2026.06.17

公式ドキュメント

SQLの NULL は、初心者がかなりつまずきやすい概念です。空文字や0のように見えることがありますが、意味はまったく違います。

一言でいうと

NULLは「値がない、または不明」を表す特別な状態であり、0や空文字とは別物です。

NULLと似て見える値

まず、混同しやすい値を分けます。

意味
NULL値がない、不明
''空の文字列
0数値のゼロ
false真偽値の偽

たとえば、プロフィールの自己紹介文を考えます。

状態値の例意味
未入力NULLまだ登録されていない
空欄で登録''空文字として登録された
文字あり'よろしくお願いします'内容がある

NULL は「空の文字列が入っている」ではなく、「値が存在しない」と考えます。

NULLの判定

NULL= では比較しません。

SELECT *
FROM users
WHERE nickname = NULL;

この書き方は期待通りに動きません。NULL を調べるには IS NULL を使います。

SELECT *
FROM users
WHERE nickname IS NULL;

逆に、NULL ではない行を調べるには IS NOT NULL を使います。

SELECT *
FROM users
WHERE nickname IS NOT NULL;

NULLを条件で扱うときは、= NULL ではなく IS NULL を使います。

三値論理とは

SQLの条件判定は、単純な true / false だけではありません。NULL が絡むと unknown という状態が入ります。

比較結果
1 = 1true
1 = 2false
NULL = 1unknown
NULL = NULLunknown

この unknown は、WHERE では結果に残りません。WHERE は true の行だけを返すためです。

NULLを含む条件の注意

たとえば、退会していないユーザーを取りたいとします。

SELECT *
FROM users
WHERE deleted_at = NULL;

これは間違いです。正しくは次のように書きます。

SELECT *
FROM users
WHERE deleted_at IS NULL;

deleted_atNULL なら、退会日時が入っていない、つまり退会していないと判断できます。

COALESCE

COALESCE は、NULL の代わりに別の値を使いたいときに便利です。

SELECT
  name,
  COALESCE(nickname, '未設定') AS display_nickname
FROM users;

nicknameNULL の場合は '未設定' と表示します。

ただし、COALESCE は表示や計算をしやすくする道具です。データ設計として NULL を許可するべきかどうかは別に考えます。

よくある誤解

誤解実際
NULL は空文字と同じ空文字は値あり、NULLは値なしです
NULL = NULL はtrueSQLではunknownになります
WHERE col != 'x' でNULLも取れるNULLは比較結果がunknownになり残りません
とりあえず全部NULL許可でよい必須項目には NOT NULL を付けるべきです

実務での考え方

NULL を許可するかどうかは、データの意味で決めます。

項目NULLを許可するか
ユーザーID許可しない
メールアドレスサービス次第だが多くは許可しない
ニックネーム許可してもよい場合がある
退会日時未退会を表すためにNULLを使うことがある

必ず存在する値にはNOT NULLを付け、存在しない状態に意味がある場合だけNULLを許可します。

まとめ

NULL は、値がない、または不明であることを表す特別な状態です。0、空文字、falseとは別物です。条件で判定するときは IS NULL / IS NOT NULL を使い、比較演算子で扱わないようにします。

参考リソース

← 一覧に戻る
PR
PR
PR
PR