Oracle の「= null」でハマる
たしか
だったと記憶しています。(間違ってたらゴメンナサイ)
んで Oracle の場合は文法エラーにならないのでてっきり 2 と同じだろうと思ったら、
SQL> select 'a' from dual where null = null; レコードが選択されませんでした。 SQL> select 'a' from dual where '' = ''; レコードが選択されませんでした。 SQL> select 'a' from dual where null is null; 'A -- a SQL>
ワケワカンネ…。
んで情報検索。
[point] NULLは原則として、"IS NULL" か "IS NOT NULL"の演算子でしかマッチングできません
前にも書いたけど oracle は null 回りでハマりやすそうだ。
workaround として例えばこうします。
SQL> select 'a' from dual where Coalesce(null,' ')=Coalesce(null,' '); 'A -- a SQL>
(nvl
なんて oracle 固有のものは使いません。)
紹介しておいてなんですが、こーゆー小手先のテクニックは使わないでください。上の例では null と ' ' を区別できないし、なにより直感的でありません。素直に「is null」としましょう。