m2

Oracle の「= null」でハマる

たしか

  1. db2 は「XXX = null」は文法エラー(「is null」を使う)
  2. SQLServer は「XXX = null」と「XXX is 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」としましょう。