#NoEnv has been recommended (and present in the "New AutoHotkey Script" template) for a very long time.
AutoHotkey did not originally have the capability to differentiate between initialised variables and uninitialised variables; there were just empty variables and non-empty variables. It's rather late to change the behaviour -- if we are going to change it, it would make more sense to simply make #NoEnv the default. v2 does, and I think AutoHotkey_H (including v1) does.
Obviously the behaviour (after explicitly assigning an empty string) is confusing and error-prone; that's why there's a warning.
just me wrote:after an assignment which already created a script variable
The assignment doesn't
create a script variable, just initialises it.
Common source of confusion: Any non-dynamic reference to a variable creates that variable the moment the script launches.
Source: Functions