2026年1月13日火曜日

SQL Server NULLの扱いと注意点|IS NULL・COALESCE・NULLIFの基本と実務例

思わぬ集計ミスの原因?SQL ServerのNULLの扱い方と注意点を徹底解説

SQL Serverを使ううえで意外と見落とされがちなのが「NULLの扱い」です。
NULLは「値が存在しない」ことを意味しますが、0 や空文字とは異なる特別な値であり、比較や演算において特別な動作をします。
この記事では、IS NULLによる判定COALESCE・NULLIFの使い方、および実務での注意点を初心者向けにわかりやすく解説します。

目次

NULLとは?SQLにおける「値なし」の意味

NULLは「未知」や「不明」を意味する

NULLは「データが存在しない」または「値がわからない」状態を示します。
つまり、0 や空文字('')とは異なり、「何も入っていないことを明示する特別なマーカー」です。

意味
0 数値が0として存在する
''(空文字) 文字列が空として存在する
NULL 値そのものが存在しない(不明)

NULLを含む比較の結果

NULLは他の値とは比較できません。次の例のように、NULLとの比較は常に「不明(UNKNOWN)」になります。


SELECT CASE WHEN NULL = NULL THEN '同じ' ELSE '異なる' END;  -- 結果:異なる

このように、NULL同士であっても「等しい」とは判定されません。

IS NULLとIS NOT NULLでNULLを判定する

NULL判定は「= NULL」ではできない

NULLは通常の比較演算子(=, <>, !=)では判定できません。
NULLを検出するには、必ず IS NULL または IS NOT NULL を使います。


SELECT * FROM Employees
WHERE Department IS NULL;

逆に、部署が登録されている社員を抽出する場合:


SELECT * FROM Employees
WHERE Department IS NOT NULL;

このように、IS NULL/IS NOT NULL はNULL特有の比較方法です。

COALESCE関数でNULLを代替する

COALESCEとは?

COALESCE関数は、複数の引数の中で最初にNULLでない値を返す関数です。
「もしNULLなら別の値を使いたい」というときに便利です。


SELECT COALESCE(PhoneNumber, '未登録') AS Phone
FROM Customers;

上記の例では、電話番号がNULLの行に「未登録」と表示されます。

複数候補を指定できる

引数は2つ以上でもOKです。先に見つかった非NULL値が採用されます。


SELECT COALESCE(AltEmail, Email, 'no-reply@example.com') AS ContactEmail
FROM Users;

NVL(Oracle)と似た機能ですが、SQL標準関数として移植性があります。

NULLIF関数で同一値をNULLとして扱う

NULLIFの基本

NULLIFは、2つの値が等しい場合にNULLを返す関数です。
主に「前後の値が変わっていない場合はNULLとして扱う」といった条件で使われます。


SELECT NULLIF(Price, 0) AS ValidPrice
FROM Products;

Price が 0 の場合、結果は NULL。0でない場合はその値が返されます。

UPDATE文での活用例

同じ値の更新をスキップしたい場合などにも利用できます。


UPDATE Employees
SET Phone = NULLIF(@NewPhone, Phone);

新しい値と現行値が同じなら NULL が設定され、後段のUPDATEトリガーなどを抑制できます。

NULLを含む演算・比較・集計の注意点

数値演算では結果もNULLになる


SELECT 100 + NULL;  -- 結果:NULL

NULLが含まれると結果もNULLになるため、COALESCEで代替値を設定するのが実務的です。

集計関数はNULLを無視する

SUMやAVGなどの集計関数は、NULLを自動的に除外して計算します。


SELECT AVG(Salary) FROM Employees;  -- NULLの行は除外

COUNT(*) はNULLも含めて行数を数えますが、COUNT(列名) はNULLを除外する点にも注意が必要です。

関数 NULLの扱い
COUNT(*) NULLを含めてカウント
COUNT(列名) NULLを除外
SUM / AVG / MAX / MIN NULLを除外して計算

まとめと次のステップ

学んだ内容の整理

  • NULLは「値が存在しない」特別な状態で、0や空文字とは異なる。
  • NULL判定はIS NULL/IS NOT NULLを使う。
  • COALESCEで代替値を設定し、NULLIFで同値をNULL化できる。
  • 集計関数はNULLを除外するため、意図せず平均や件数がずれる可能性に注意。

参考リンク

SQL Server 解説用イメージ

0 件のコメント:

コメントを投稿