I do not really agree to this.
Nullable types in .NET allow the
variable in question to actually be
null. DBNull is a way to say "in
another environment, this value was
considered to be null". Since we need
a way do differentiate between
actually null - or "natively" null, as
in native to our current runtime - and
null in another system we communicate
with, nullable types and DBNull serve
completely different purposes.
This distinction is only required if you do not know if your local variable has allready been fetched from the database. If you know that the variable has been fetched from the database it would be okay to identify null and DBNull.
But the difference is that null in programming languages signals the absence of a value and null == null is true. In databases the null indicates something more like an unknown value. Therefore null == null is false in databases; null equals nothing at all because you cannot tell for an unknown value if it equals another unknown value. I am not sure if DBNull is implemented this way and DBNull.Value == DBNull.Value evaluates to false.
EDIT
I just tested it and DBNull does not behave as exspected. DBNull.Value == DBNull.Value evaluates to true but should yield false with the semantic of the database null.