This expression is (I think) a well-formed query, but is rejected by Postgresql 8.4 (t is a table name).
t t1 NATURAL JOIN t t2; Here is the relevant parts of grammar (with some optional elements omitted for simplicity): <query expression> ::= <query expression body> <query expression body> ::= <joined table> <joined table> ::= <natural join> <natural join> ::= <table reference> NATURAL JOIN <table primary> <table reference> ::= <table primary> <table primary> ::= <table or query name> [ <correlation name> ] <table or query name> ::= <table name> Nor is this use of <joined table> accepted in the <query expression> form of a <with list element>: WITH tw AS ( t t1 NATURAL JOIN t t2 ) TABLE tw; This leads me to believe that the unrecognized grammar rule (in SQL99 standard terms) is <query expression body> ::= <joined table> There are, of course, other ways to express the operation, including SELECT * FROM (t t1 NATURAL JOIN t t2); But I am curious why the first expression is not accepted, besides the immediately obvious "it's not in the Postgres version of the SQL grammar." Clem Dickey