SQLのNULLを正しく扱う方法|IS NULL・NOT NULL の基本と注意点

SQLを使ってデータを扱うとき、**NULL(ヌル)**は特別な意味を持ちます。NULLは「空文字」や「0」とは異なり、値が存在しない(不明である)ことを表すものです。そのため、正しく理解していないと意図しない結果を返してしまうことがあります。
この記事では、SQLにおけるNULLの基本的な考え方と、IS NULL・IS NOT NULL を使った扱い方の注意点を解説します。
Contents
NULLとは何か?
まず押さえておきたいのは、NULLは「何もない」という状態を意味する特殊な値だということです。
0:数値のゼロ'':空文字列(長さ0の文字列)NULL:値が存在しない、または不明
例えば、顧客テーブルの電話番号カラムで「まだ登録されていない」状態をNULLで表すことが多いです。
NULLの比較で注意すべきこと
通常の比較演算子(= や <>)では、NULLを判定することはできません。
SELECT * FROM Customers WHERE Phone = NULL; -- 常に結果は0件になるこのように書いても、Phone列にNULLが入っているレコードは取得できません。
なぜなら、NULLは「値が不明」なので、等しいかどうかを比較できないからです。
IS NULL と IS NOT NULL の使い方
NULLを判定するには、専用の構文を使う必要があります。
IS NULL
あるカラムがNULLかどうかを判定します。
SELECT * FROM Customers
WHERE Phone IS NULL;→ 電話番号が未登録の顧客を抽出できます。
IS NOT NULL
NULLではないデータを取得したい場合はこちらです。
SELECT * FROM Customers
WHERE Phone IS NOT NULL;→ 電話番号が登録済みの顧客だけを取得できます。
集計関数とNULLの関係
SQLの集計関数(SUM, AVG, COUNTなど)は、基本的にNULLを無視して計算されます。
例:
SELECT AVG(Salary) FROM Employees;この場合、SalaryがNULLの行は計算から除外されます。
ただし、COUNT(*) はNULLを含むすべての行をカウントしますが、COUNT(列名) はNULLを除外して数えます。
NULLを扱うときの注意点
- 比較は必ず
IS NULL/IS NOT NULLを使う=や<>では判定できません。 - 集計でNULLは無視される
計算対象外になるので、意図した結果になっているか確認しましょう。 - NULLと空文字の違いを理解する
DBによっては、空文字をNULLとして扱うもの(例:Oracle)もあるため注意が必要です。
まとめ
- NULLは「値が存在しない(不明)」を表す特殊な値。
- NULLを判定するには
IS NULL/IS NOT NULLを使用する。 - 集計関数はNULLを無視するため、結果が思った通りにならない場合がある。
SQLでNULLを正しく扱えるようになると、データ抽出や分析の精度がぐっと上がります。

