back @BlueGreen
I'm sorry but I totally disagree. It is not brevity to refer to a DBMS as a database, it is just incorrect. It's like referring to Microsoft Windows as Microsoft Office. Such errors really annoy me because some people do not know the difference and have their misconceptions re-enforced.
As for your beef with nulls, Please do read about the meaning of null, it should help you to realise why we have to jump through such hoops when dealing with it.
A brief explanation of it is that null is considered an unknown value. As a result you cannot safely say that 5 != null, because that null value may actually be 5. So given that WHERE Col NOT IN (a,b,c) is basically broken down into WHERE Col != a AND Col != b AND Col != c, if a, b, or c is null then this obviously evaluates to false.
Another common mistake with null include not realising that (a != b OR a = b) can actually evaluate to false if a or b is null because a neither equals be nor does not equal b, we can't be sure of either (I'm not sure if some optimisers would actually remove this statement though - they shouldn't).
picking a fight with the SQL standards is a very brave fight to pick, they were not written lightly. Can you imagine being without null, you clearly need it given that you're using it and encountering issues. So with the necessary evil of nulls come the explicit handling of the case in your logic.