Factsheet
rdbms - Null value in Database - Stack Overflow
oop - Are nulls in a relational database okay? - Stack Overflow
What are pros and cons of using NULLS vs NOTNULLs in database?
Is using `blank=True, null=True` a lot considered to be a bad practice?
It's all about the context in which it's used. A null means there is no value but the reason for this will depend on the domain in which it is being used. In many cases the items you've listed are all valid uses of a null.
It can mean any of those things (and it is not always obvious which), which is one argument against using nulls at all.
See: http://en.wikipedia.org/wiki/Null_(SQL)#Controversy
Nulls are negatively viewed from the perspective of database normalization. The idea being that if a value can be nothing, then you really should split that out into another sparse table such that you don't require rows for items which have no value.
It's an effort to make sure all data is valid and valued.
In some cases having a null field is useful, though, especially when you want to avoid yet another join for performance reasons (although this shouldn't be an issue if the database engine is setup properly, except in extraordinary high performance scenarios.)
One argument against nulls is that they don't have a well-defined interpretation. If a field is null, that could be interpreted as any of the following:
- The value is "Nothing" or "Empty set"
- There is no value that makes sense for that field.
- The value is unknown.
- The value hasn't been entered yet.
- The value is an empty string (for databases that don't distinguish between nulls and empty strings).
- Some application-specific meaning (e.g., "If the value is null, then use a default value.")
- An error has occurred, causing the field to have a null value when it really shouldn't.
Some schema designers demand that all values and data types should have well-defined interpretations, therefore nulls are bad.