Ditt enda problem är att du använder OR istället för AND.
Låt oss titta på fallet där värdet är NULL:
CON.EMAILADDRESS IS NOT NULL
=> FALSKTCON.EMAILADDRESS != ' '
=> NULL
FALSE ELLER NULL => NULL. Eftersom kriterierna inte resulterar i TRUE väljer du inte NULLs.
Och om värdet är en tom sträng '', ' ' eller vilken längd som helst:
CON.EMAILADDRESS IS NOT NULL
=> SANTCON.EMAILADDRESS != ' '
=> FALSKT
SANT ELLER FALSKT => SANT. Du väljer den tomma strängen.
Jag antar att det är detta som förvirrade dig:trots att du av misstag använde OR istället för OCH du tog fortfarande bort några tomma strängar, men inte alla.
Så:
WHERE CON.EMAILADDRESS IS NOT NULL AND CON.EMAILADDRESS != ' ';
Eller som valfri sträng != ''
kan inte vara NULL (NULL != ''
=> NULL, inte TRUE), helt enkelt:
WHERE CON.EMAILADDRESS != '';