SQLにおけるLIKE演算子は、文字列の一部に一致するかどうかを確認する際に使用されます。その中には、否定の条件を満たすNOT LIKE演算子もあります。しかし、注意すべき点として、NULL値のカラムに対してはNOT LIKE演算子が適用されません。
このことに気付かずバグを作ってしまったので備忘録を残します。
なぜ適用されないのか
SQLでは、NULLは値が存在しないことを表します。つまり、NULL値のカラムには実際には何も格納されておらず、データが欠損している状態です。そのため、NULL値のカラムに対しては、通常の比較演算子やパターンマッチング演算子が適用されないのです。
特に、NOT LIKE演算子は、あるパターンに一致しない値を取得する際に使用されます。しかし、NULL値のカラムに対しては、パターンが存在しないため、結果が得られず、出力されません。
例えば、以下のようなSQLクエリがあるとします。
SELECT * FROM users WHERE name NOT LIKE '%John%';
上記のクエリの場合、以下のデータのみ出力されます。
ichirou -> 出力される
zirou -> 出力される
John kenedy -> 出力されない
John -> 出力されない
NULL -> 出力されない
NULL値を含むカラムに対しては、IS NULL演算子やIS NOT NULL演算子を使用するなど、適切なNULL値の扱いを考慮したクエリを組み立てる必要があります。