Database Normalization: A Case Of The NULLs
I beg to disagree with this author.  The results are expected, but may not be the desired values.  Null values don't work well with logical comparisons as the value is unknown, as is the result of a comparison.

If you are using nullable columns as query criteria, you do need to handle them appropriately.  These are some of method I have used:

WHERE   (nullable = ? OR nullable IS NULL)
WHERE   coalesce(nullable, -1) = ?
WHERE   nvl(nullable, -1) = ?


EDIT: I do agree with the author that avoiding NULL values on searchable fields is desirable, but designing a database without NULL columns can result in other issues.  As design goals, avoiding duplicate and NULLs are appropriate,  However a database row is a representation of something else, sometimes an imperfect representation.  

For code lists values like "Unspecified", "Unknown", "Not applicable" and "To be determined" may be appropriate.  If NULL has meaning, then it is may be appropriate to use that meaning rather than NULL for the column value.

You may also want to consider whether the data has value.  I do encounter data which has been gathered because it could be, but is neither used nor useful.  Consider the privacy issues or other legal issues resulting from gathering the data.

Nullable columns are common when subtypes occur in the same table.  Understanding the subtypes helps in deciding on the appropriate approach to handling these columns.  Using separate tables for each subtype can make the design more complex.