I appreciate the replies. I understand the explanation. What I do not understand is why and/or how it would be useful to have the result of comparing something to nothing be 'unknown'. How is that ever useful? When I programmatically ask "Is there a value?", I don't imagine I'd ever want a 'maybe' in response. Maybe I'm just not imaginative enough!
First: Realise that there are a lot of misconceptions about NULL. NULL does not mean "Unknown" (as many people falsely assume). It simply means "There is no value here". Like an empty cell in a (pen and paper) data grid. There can be various reasons for that data to be missing, and the NULL itself does not carry any information on what the reason is, so the database should not infer. It simply does not have the data.
Now imagine that a criminal walks in your home, points a gun at your head, and says "You know Hugo Kornelis from SQLServerCentral, right? Now quick, answer this question: is he younger than 40? Refuse to answer, I shoot, Answer incorrect, I shoot. Answer correct, you live". What are you going to do?
I hope you are going to say "I have no idea" (well, unless you actually know my age). If the criminal keeps her word, you live - after all, you did not refuse to answer, nor did you give an incorrect answer.
In the database in your head, the value that would complete the sentence "Hugo Kornelis is ... years old" is missing. Why it is missing is irrelevant - maybe I once told you but you didn't record it; maybe I never told you, maybe it is highly classified and you had to pretend not to know, or maybe the age of Hugo Kornelis is not applicable because I am a very smart programmed 'bot that posts on SSC under a fake user name. Regardless of the cause, the result is the same - you can only answer the question whether I am younger than 40 with the answer "I don't know".
In database terms, the table Persons has a row identified by PersonName = 'Hugo Kornelis', and that row has value NULL in the column PersonsAge. So the predicate WHERE PersonsAge < 40 has to evaluate to Unknown. And the committee that defined the ANSI standard for SQL has decided that a predicate that evaluates to Unknown means that the row should not be included in the result set of the query.
Recommended reading: http://sqlblog.com/blogs/hugo_kornelis/archive/2007/07/06/null-ndash-the-database-rsquo-s-black-hole.aspx (and the three follow-up posts; links are in the comments section).