It can be used on a type to control Nullability, it is then called the "Null Forgiving Operator". Basically, null! applies the ! operator to the value null. This overrides the nullability of the value null to non-nullable, telling the compiler that null is a "non-null" type.
The reasoning is that a null means "unknown", so the result of any comparison to a null is also "unknown". So you'll get no hit on rows by coding where my_column = null. SQL provides the special syntax for testing if a column is null, via is null and is not null, which is a special condition to test for a null (or not a null).
135 NULL has no value, and so cannot be compared using the scalar value operators. In other words, no value can ever be equal to (or not equal to) NULL because NULL has no value. Hence, SQL has special IS NULL and IS NOT NULL predicates for dealing with NULL.
The expression "NULL = NULL" evaluates to NULL, but is actually invalid in SQL; yet ORDER BY treats NULLs as equal (whatever they precede or follow "regular" values is left to DBMS vendor).
The one benefit I can see is that it does not require knowing that == null and != null treat a declared variable with value undefined as equal to null. IMHO, that isn't reason enough to use this unfamiliar (and inefficent - creates an array every time) syntax.
The main difference between e != null and e is not null is the way the the compiler executes the comparison. Microsoft: "The compiler guarantees that no user-overloaded equality operator == is invoked when expression x is null is evaluated." Bottom Line: If you are writing code that you don't want to depend on someone's implementation of the != and == operators, use is null and is not null ...
From the preceding examples, it is clear that undefined and null are two distinct types: undefined is a type itself (undefined) while null is an object. Proof :
173 Overloaded equals operator There is in fact a difference in semantics between the two comparisons when you are comparing null with a type that has overloaded the == operator. foo is null will use direct reference comparison to determine the result, whereas foo == null will of course run the overloaded == operator if it exists.