Tu único problema es que usas OR en lugar de AND.
Veamos el caso donde el valor es NULL:
CON.EMAILADDRESS IS NOT NULL=> FALSOCON.EMAILADDRESS != ' '=> NULO
FALSO O NULO => NULO. Como los criterios no dan como resultado VERDADERO, no seleccione NULL.
Y si el valor es una cadena vacía '', '', o cualquier longitud:
CON.EMAILADDRESS IS NOT NULL=> VERDADEROCON.EMAILADDRESS != ' '=> FALSO
VERDADERO O FALSO => VERDADERO. Seleccionas la cadena vacía.
Supongo que esto es lo que te confundió:a pesar de haber usado OR por error en lugar de AND, eliminaste algunas cadenas vacías, pero no todas.
Entonces:
WHERE CON.EMAILADDRESS IS NOT NULL AND CON.EMAILADDRESS != ' ';
O, como cualquier cadena != '' no puede ser NULL (NULL != '' => NULO, no es VERDADERO), simplemente:
WHERE CON.EMAILADDRESS != '';