When joining tables, it is necessary to join each table mentioned
in the FROM clause by specifying joins in the WHERE
clause. If you use a table name in the FROM clause but fail
to join it in the WHERE clause,
the table is marked as unjoined. It is then paired with every row
in the query result. Figure illustrates this
effect using the tables from Figure
.
test=> SELECT *
test-> FROM animal, vegetable;
animal_id | name | vegetable_id | name
-----------+-----------------+--------------+-----------------
507 | rabbit | 507 | lettuce
508 | cat | 507 | lettuce
507 | rabbit | 507 | carrot
508 | cat | 507 | carrot
507 | rabbit | 507 | nut
508 | cat | 507 | nut
(6 rows)
The SELECT does not join any column from animal to any column in vegetable, causing every value in animal to be paired with every value in vegetable. This result, called a Cartesian product , is usually not intended. When a query returns many more rows than expected, look for an unjoined table in the query.