IS NOT DISTINCT FROM

入力のどちらかが真または偽ではなくNULLの場合、通常の比較演算子は("不明"を意味する)nullを生成します。例えば7 = NULLはnullになります。この動作が適切でない場合は、IS [ NOT ] DISTINCT FROM構文を使用してください。


expression IS DISTINCT FROM expression
expression IS NOT DISTINCT FROM expression


非NULLの入力では、IS DISTINCT FROMは<>演算子と同じです。 しかし、入力がどちらもNULLの場合、これは偽を返し、片方の入力のみがNULLの場合は真を返します。 同様に、IS NOT DISTINCT FROMは非NULL入力では=と同じですが、両方の入力がNULLであれば真を、片方のみがNULLの場合は偽を返します。このように、これらの構文はNULLを"不明な値"ではなく、通常の値かのように動作します。

NULL = NULL -> NULL となるところを、NULL = NULL -> TRUE としたい場合に、expression IS NOT DISTINCT FROM expression と書けます。
ただ、ちょっと長ったらしいのと、DISTINCTもFROMも、他の句でも使うキーワードなのでちょっと紛らわしい感じが…

MySQLだと、<=>演算子があって、同等のことが簡潔に書けます。

・<=>

NULL - 安全等価。この演算は、= 演算子のように、等価比較を行いますが、両方のオペランドが NULL であれば、NULL でなく 1 を戻し、一方のオペランドが NULL の場合は、NULL でなく 0 を戻します。

MySQL :: MySQL 5.1 リファレンスマニュアル :: 11.1.3 比較関数と演算子