Here's the setup on Postgresql 9.2.4: CREATE TABLE table ( id integer NOT NULL, some_text text ); Now we enter one record, with a null or empty string for some_text, so that when we query: SELECT * FROM table WHERE some_text IS NULL; I get the entry back. So far so good. However, when I query: SELECT * FROM table WHERE some_text NOT ILIKE "%anything%'; I find that nothing was returned. Why is that