Hans-Jürgen Schönig <hs@cybertec.at> writes:
> test=# select a.*, d.* from a as c, b as d where a.id=b.id;
> NOTICE: Adding missing FROM-clause entry for table "a"
> NOTICE: Adding missing FROM-clause entry for table "b"
> Althoug c and d are aliases for a and b, the two tables are added to the
> list in the from clause. Is this the desired behaviour or is it a bug?
This is not a bug. If the system treated different aliases for a table
as interchangeable, then there'd be no possibility of doing a self-join.
"a.*" is not a legal reference to a FROM entry "a as c": the AS alias
*totally* hides the underlying table name as far as this query is
concerned.
What you have above is interpreted as
from a as c, b as d, a as a, b as b
The NOTICEs are intended to warn you that this is going on.
If we took a hardline approach to enforcing the letter of the SQL92
standard, we'd reject this query as illegal: SQL92 doesn't allow
implicit FROM entries. (And no, it doesn't think "a.*" refers to
"a as something-else", either.)
regards, tom lane