Exactly the point. Michael, NULL *is* information. It means "unknown" and
that is in itself useful information. A common example:
A new employee is hired but which department she will work in is unknown. So
the data entry person enters all the known information and leaves the rest
until it has been clarified.
The alternative is even worse than the so-called NULL problem and the
alleged difficulty of querying against NULLable columns: in a case like that
described above, the only way to handle it is to create a fake row in the
foreign-key table, for "Department Zero" or somesuch. That immediately turns
every query into a more complex beast that it would otherwise have been.
Every single query must exclude this "zeroth" row; join a few tables all
exhibiting this problem and things get really crazy.
Not to mention the fact that these "zeroth" rows falsify reality and combine
fiction with fact. Even worse, the "-99999" approach means that you can't
impose a constraint on the column (such as "must be a positive integer".
And finally, I cannot believe that you really mean "no NULLS ever". Surely
you mean only FKs. Otherwise, how would you handle fax numbers for people
with no fax, or middle names for people with none?