I'm with you on Null and Zero (for example, from a database standpoint)... but I'm not clear on what it means for a variable to be "Nothing". Can you give a concrete example?
In VB NOTHING is a keyword for object variables. As 69dodge said, "Nothing" in Visual Basic is kind of like a null pointer in C. Sort of. VB has its own built in way of handling pointers and evaluating variables.
If you do "Dim x as Object", an Object could be all sorts of things so VB doesn't know how to allocate memory. So it doesn't. OK, maybe it actually does, I don't remember, acutally it probably does set apointer, but it doesn't matter much. Trying to do anything with x (other than check if x is NOTHING or SET x) will return a "Object not set" error. So VB recognizes that such a thing as x exists, but it does not have a value property. It has no value, because it is nothing. It can't even have a value of null (null means that it has a value property, but the value is not set, or perhaps more correctly is invalid). It is just a name that COULD refer to something with a value.
VB also has EMPTY, which is (I think) more or less the same as NOTHING for non-object variables. Sort of. To be EMPTY, a pointer must be set. For example, a declared sting has a zero pointer, but is not EMPTY because no value has been initiated for the variable to have a value property of EMPTY.
A concrete example is calling the InputBox function. When you call x = InputBox(""), the user can click Cancel, or not enter anyhting and click OK. OK sets x as a null string. Cancel doesn't do anything with x. But in both cases x is considered not EMPTY and will evaluate to a null string. The only way to tell the difference is to check whether the string pointer of x is zero (which would mean the user clicked Cancel).
Which just proves how illogical VB is. But it is an easy way of handling variable. C would never accept "the color of the invisible pink unicorn", but VB could carry on happily (at least for a while) just "imagining" that there is a unicorn. But it carrys and extension of "zero". You can have zero (a thing that has a value and the value is zero), null (a thing that has a value and no value applies or is set), and nothing (a thing that has no value). You could also have a nullthing (which would be no thing).
I brought it up because all of these things (zero, one, a 'thing', null, nothing) are just descriptions that we apply to the physical universe. The physical universe itself doesn't care about or recognize apples or chairs and any such things. Breaking down the universe into 'things' is just a way for us to understand it and define it.
Number: If I asked, how many swimmers are in the pool, and the answer was two, then I could also ask "what are the names of the swimmers." Because the pool has a property of "swimmer" with a value and therefore "swimmer" have a "name" property.
Zero: If I asked, how many swimmers are in the pool, and the answer was zero, and I ask "what are the names of the swimmers", it make no sense. Because swimmers is zero, there is no "swimmer" to have a name property. We can have swimmer = 0, but then we can't look further into swimmer.
Null-Invalid: If I asked, how many swimmers are in the pool, and the answer was "I don't know", and I ask "what are the names of the swimmers", it make no sense. Because swimmers is null. The value you asked for is invalid. We can't look further into swimmer.
Null-Not set: If I asked, how many concepts are in the pool, the answer is also null. Because the pool does not have a 'concept' property. The value you asked for is not set.
Nothing: If I asked, how many swimmers are in the pool, and there is no pool, the answer is nothing. Because pool is nothing.
Nullthing: If I asked, how many whoop-dill-dottely-doo, the asnwer is nullthing. Because I don't know what you are talking about.