Jedynym problemem jest to, że używasz OR zamiast AND.
Spójrzmy na przypadek, w którym wartość wynosi NULL:
CON.EMAILADDRESS IS NOT NULL=> FAŁSZCON.EMAILADDRESS != ' '=> BRAK
FAŁSZ LUB NULL => NULL. Ponieważ kryteria nie dają wartości TRUE, nie wybierasz wartości NULL.
A jeśli wartość jest pustym ciągiem '', '' ' lub jakakolwiek długość:
CON.EMAILADDRESS IS NOT NULL=> PRAWDACON.EMAILADDRESS != ' '=> FAŁSZ
PRAWDA LUB FAŁSZ => PRAWDA. Wybierasz pusty ciąg.
Przypuszczam, że to cię zdezorientowało:pomimo błędnego użycia OR zamiast AND, nadal usunąłeś niektóre puste ciągi, ale nie wszystkie.
A więc:
WHERE CON.EMAILADDRESS IS NOT NULL AND CON.EMAILADDRESS != ' ';
Lub, jak każdy ciąg != '' nie może być NULL (NULL != '' => NULL, nie TRUE), po prostu:
WHERE CON.EMAILADDRESS != '';