orcleのnull挙動

SQLを作っていて、値がnullだったら対象にしない、というSQLを作っており、

dat is not null

その後、nullじゃないけど空文字で入っている、と言う場合も考慮して、以下のようにしました。

dat is not null and dat != ''

これをやると、データが全く出てこなくなる。
あれ? と思って色々試した結果、以下の情報にたどり着きました。

oracleは空文字の場合はnull扱いになる。
nullと比較をis not null以外でやろうとすると想像していない挙動になる。

結論から書くと、is not null をした時点で空文字の事を気にしなくて良くなっているのですが、
調査SQLを作ってもよくわからず、調査に時間が掛ったので、覚える意味でもメモ。



参考
http://blog.livedoor.jp/i_am_best/archives/7870002.html