There is a huge difference between them! "Null" is a common type or value that represents the_absence_ of something.While the "undefined" is a value for representing of _existence_ of something but yet not defined, without a certain value.
to #5 It's common to happen NULL-values in queries with LEFT JOIN, when the system couldn't find the appropriate records in the right table. And the value 'Undefined' is usually used in scripts (modules). For example, if you call a function and skip some parameters but use commas then the skipped parameters will be equal 'Undefined' inside the function. Look here: >> f(1,,3) >> the second parameter is 'undefined'.
And another sample to consider. Compare the results of "WHERE field = NULL" with "WHERE field = Undefined" when the field contents the NULL and Undefined. In other words, Undefined is equal Undefined because they are the same, but one NULL is not equal another NULL because.. hmm... because they are unknown, absent. But it's true only in queries. In scripts they are equal each other. It's a kind of magic :)
to (6) so, i don't have to use NULL, but queries return it to me when "with LEFT JOIN, when the system couldn't find the appropriate records in the right table.", why it doesn't return undefined instead of NULL?
to (7) Because NULL is common for this situation (similar to SQL) And in some cases the system returns the Undefined to you even in queries, e.g. for empty fields of complex types.