Il tuo unico problema è che usi OR invece di AND.
Diamo un'occhiata al caso in cui il valore è NULL:
CON.EMAILADDRESS IS NOT NULL
=> FALSOCON.EMAILADDRESS != ' '
=> NULLO
FALSO O NULLO => NULLO. Poiché i criteri non risultano TRUE, non selezioni NULL.
E se il valore è una stringa vuota '', ' ' o qualsiasi lunghezza:
CON.EMAILADDRESS IS NOT NULL
=> VEROCON.EMAILADDRESS != ' '
=> FALSO
VERO O FALSO => VERO. Seleziona la stringa vuota.
Suppongo che questo sia ciò che ti ha confuso:nonostante tu abbia usato erroneamente OR invece di AND hai comunque rimosso alcune stringhe vuote, ma non tutte.
Quindi:
WHERE CON.EMAILADDRESS IS NOT NULL AND CON.EMAILADDRESS != ' ';
Oppure, come qualsiasi stringa != ''
non può essere NULL (NULL != ''
=> NULL, non TRUE), semplicemente:
WHERE CON.EMAILADDRESS != '';