Satu-satunya masalah Anda adalah Anda menggunakan OR alih-alih AND.
Mari kita lihat kasus di mana nilainya NULL:
CON.EMAILADDRESS IS NOT NULL
=> SALAHCON.EMAILADDRESS != ' '
=> NULL
SALAH ATAU NULL => NULL. Karena kriteria tidak menghasilkan TRUE, Anda tidak memilih NULL.
Dan jika nilainya adalah string kosong '', ' ', atau berapa pun panjangnya:
CON.EMAILADDRESS IS NOT NULL
=> BENARCON.EMAILADDRESS != ' '
=> SALAH
BENAR ATAU SALAH => BENAR. Anda memilih string kosong.
Saya kira inilah yang membingungkan Anda:meskipun salah menggunakan OR alih-alih AND Anda masih menghapus beberapa string kosong, tetapi tidak semua.
Jadi:
WHERE CON.EMAILADDRESS IS NOT NULL AND CON.EMAILADDRESS != ' ';
Atau, seperti string apa pun != ''
tidak boleh NULL (NULL != ''
=> NULL, bukan TRUE), cukup:
WHERE CON.EMAILADDRESS != '';