Personally, I hate the way mIRC's local variables work. If it were up to me they'd work like most language. Meaning if I do:

alias blah {
if ($1) {
var %i = 1
}
}

Well then %i only works from within that if statement. The other thing is that variables defined within a larger block can be accessed within smaller blocks, i.e. if var %i = 1 was within the alias { } it could be used within the if() {}.

That should answer your question, for the first part, local variables of the parent should be available in the child (and grandchildren,etc.) and a variable defined in the local alias should only be available within that local alias and it's children (and grandchildren, etc.). But, like I said, if it were up to me the entire local variable system would work like that.