問題は、NULLはそれ自体とは等しくないものと見なされないことですが、奇妙な点は、それ自体と等しくないことです。
次のステートメントを検討してください(SQL Server T-SQLではBTWは不正ですが、My-SQLでは有効ですが、これはANSIがnullに対して定義しているものであり、SQLステートメントでもcaseステートメントなどを使用して確認できます)。
SELECT NULL = NULL -- Results in NULL
SELECT NULL <> NULL -- Results in NULL
したがって、質問に対する真/偽の答えはありませんが、代わりに答えもnullです。
これには、たとえば次のような多くの意味があります。
- あなたが明示的に使用しない限り、すべてのヌル値は常にELSE句を使用しますするCASEステートメントは、WHEN NULL条件(IS NOT条件)
WHEN NULL
- 文字列連結
SELECT a + NULL -- Results in NULL
- WHERE IN句またはWHERE NOT IN句では、正しい結果が必要であるかのように、相関サブクエリでnull値を除外するようにしてください。
一つは、指定することで、SQL Serverでこの動作を無効にすることができますSET ANSI_NULLS OFF
が、これはされて、NOT推奨、それは単に標準の偏差ので、多くの問題を引き起こす可能性がありますように行うべきではありません。
(補足として、My-SQLには<=>
null比較に特別な演算子を使用するオプションがあります。)
比較すると、一般的なプログラミング言語では、nullは通常の値として扱われ、それ自体と等しくなりますが、これもNAN値であり、これもそれ自体とは等しくありませんが、それ自体と比較すると、少なくとも「false」を返します(そして等しくないかどうかをチェックするとき、異なるプログラミング言語は異なる実装を持っています)。
ただし、基本言語(VBなど)には「null」キーワードはなく、代わりに「Nothing」キーワードを使用します。これは直接比較では使用できず、SQLのように「IS」を使用する必要があります。ただし、実際にはそれ自体と同じです(間接比較を使用する場合)。