唯一の問題は、ANDの代わりにORを使用することです。
値がNULLの場合を見てみましょう:
CON.EMAILADDRESS IS NOT NULL
=> FALSE-
CON.EMAILADDRESS != ' '
=> NULL
FALSE OR NULL=>NULL。基準がTRUEにならないため、NULLを選択しないでください。
また、値が空の文字列''、''、または任意の長さの場合:
CON.EMAILADDRESS IS NOT NULL
=> TRUE-
CON.EMAILADDRESS != ' '
=> FALSE
真または偽=>真。空の文字列を選択します。
これがあなたを混乱させたと思います。ANDの代わりにORを誤って使用したにもかかわらず、空の文字列をいくつか削除しましたが、すべてではありません。
だから:
WHERE CON.EMAILADDRESS IS NOT NULL AND CON.EMAILADDRESS != ' ';
または、任意の文字列として!= ''
NULLにすることはできません(NULL != ''
=> NULL、TRUEではありません)、単純に:
WHERE CON.EMAILADDRESS != '';