I don't think that the fact that the query compiles is a bug per se. It compiles because subqueries must have access to their parent in order to create correlated queries. The compiler can't assume what that correlation is going to look like so if it can resolve the name it will. Think of:
where Exists (SELECT * FROM OrderTable where PKClientID = FKClientID)
Now, while I consider it bad to have different names for the same information, I 've seen this type of design. The Compiler must
be able to compile the above because it is valid. Therefore it also must be able to compile the syntactically correct, but bizarre:
select * from ClientTable, Contracts
Where clientid in (select contractclientid where overdue > 30)
As far as the compiler is concerned as long as the names contractclientid and overdue are resolvable then it is a syntactically valid statement.