In how many languages is Null not equal to anything not even Null?
Oracle is this way.
SELECT * FROM dual WHERE NULL=null; --no rows returned
It's this way in SQL (as a logic language) because null means unknown/undefined.
However, in programming languages (like say, C++ or C#), a null pointer/reference is a specific value with a specific meaning -- nothing.
Two nothings are equivilent, but two unknowns are not. The confusion comes from the fact that the same name (null) is used for both concepts.
MySQL has a null-safe equality operator, <=>, which returns true if both sides are equal or both sides are null. See MySQL Docs.
You can make ruby work that way:
class Null
def self.==(other);false;end
end
n=Null
print "Null equals nothing" if n!=NULL
In VB6 the expression Null = Null will produce Null instead of True as you would expect.
This will cause a runtime error if you try to assign it to a Boolean, however if you use it
as the condition of "If ... Then" it will act like False. Moreover Null <> Null will also
produce Null, so:
In VB6 you could say that Null is neither equal to itself (or anything else), nor unequal!
You're supposed to test for it using the IsNull() function.
VB6 also has other special values:
Nothingfor object references.Nothing = Nothingis a compile error. (you're supposed to compare it using "is")Missingfor optional parameters which haven't been given. It has no literal representation so you can't even writeMissing = Missing. (the test isIsMissing(foo))Emptyfor uninitialized variables. This one does test equal to itself although there's also a functionIsEmpty().- ... let me know if I've forgotten one
I remember being a bit disgusted with VB.
In C#, Nullable<bool> has interesting properties with respect to logical operators, but the equality operator is the same as other types in that language (i.e., ((bool?)null == (bool?)null) == true).
To preserve the short-circuited behavior of the short-circuited logical operators, and to preserve consistency with the non-short-circuited logical operators, the nullable boolean has some interesting properties. For example: true || null == true. false && null == false, etc. This stands in direct contradiction with other three-valued logic languages such as ANSI SQL.
In SQL you would have to do something like:
WHERE column is NULL
rather than
WHERE column = NULL