I don't agree, perhaps not strongly, but still not. Having the same null for different context is no better than having the same 0 in different contexts. Was the result from the SQL query null, or wasn't it in the cache I stored it in? But that is not the important point of this discussion.
Looks like we are facing one of three non-appealing alternatives.
1. Keep things as they are. Mappings and objects doesn't behave symmetrically.
2. Allow mappings to store UNDEFINED. This will be abused as a null value with ill defined behaviour.
3. Don't allow UNDEFINED to be indexed from a object variable. This will allow for direct determination if a variable exists or not and get its value at the same time. This would make variables have different zero type depending on how they were accessed. Overridable by index lfun and getters (I would assume).