SQLで○○以外(<>)の時のNULLには気をつけろ!
今日実際にこんな現象を見たので、メモ的に残しておきます。
SQLで何かするときに、以下のようなパターンがあると思う。
| id | val1 |
| 1 | 5 |
| 2 | 10 |
| 3 | 1 |
| 4 | 100 |
| 5 | NULL |
| 6 | 20 |
この場合に、NULLをひっぱったりするときに IS を利用するのは知ってました。
SELECT id, val1 FROM test WHERE val1 is NULL;
ここで今回のメモは、
SELECT id, val1 FROM test WHERE val1 <> 100;
このようにした場合に、NULLはHITしないということです。
型が違うためかどうかわかりませんが、そういうことです。
対策としては、NULLについても別途条件を追加することです。
SELECT id, val1 FROM test WHERE (val1 is NULL or val1 <> 100);
これで、あなたにも明るい未来が見えることでしょう。