Votre seul problème est que vous utilisez OU au lieu de ET.
Regardons le cas où la valeur est NULL :
CON.EMAILADDRESS IS NOT NULL
=> FAUXCON.EMAILADDRESS != ' '
=> NUL
FAUX OU NULL => NULL. Comme le critère ne donne pas TRUE, vous ne sélectionnez pas NULLs.
Et si la valeur est une chaîne vide '', ' ', ou n'importe quelle longueur :
CON.EMAILADDRESS IS NOT NULL
=> VRAICON.EMAILADDRESS != ' '
=> FAUX
VRAI OU FAUX => VRAI. Vous sélectionnez la chaîne vide.
Je suppose que c'est ce qui vous a dérouté :bien que vous ayez utilisé par erreur OU au lieu de ET, vous avez quand même supprimé certaines chaînes vides, mais pas toutes.
Donc :
WHERE CON.EMAILADDRESS IS NOT NULL AND CON.EMAILADDRESS != ' ';
Ou, comme n'importe quelle chaîne != ''
ne peut pas être NULL (NULL != ''
=> NULL, pas TRUE), simplement :
WHERE CON.EMAILADDRESS != '';