Demystifying CROSS JOIN in PostgreSQL: An All-Inclusive Guide


So far, we’ve covered the basics of LEFT, RIGHT, and FULL JOINS in PostgreSQL. Now let’s discuss CROSS JOIN, an operation that often leaves people scratching their heads. While it might seem esoteric at first, CROSS JOIN serves specific use cases and can be quite useful.

What is a CROSS JOIN?

A CROSS JOIN returns the Cartesian product of two tables, meaning it will return every combination of rows from the joined tables. While this sounds simple, it can quickly produce a large amount of data, so it’s essential to understand when and how to use it effectively.


The basic syntax for a CROSS JOIN in PostgreSQL is:

SELECT columns
FROM table1
CROSS JOIN table2;

Example Using tv_series and producers Tables

Let’s say we want to find out every possible combination of tv_series and producers for some reason, perhaps for a complex analytics task.

Sample Data for tv_series and producers Tables

We’ll use the same sample data as in previous examples for consistency.


Here is a simple CROSS JOIN query using both tables:

SELECT AS series_name, AS producer_name
FROM tv_series
CROSS JOIN producers;

Be cautious when running CROSS JOIN queries on tables with many rows, as the number of records in the result set will be the number of rows in the first table multiplied by the number of rows in the second table.

Reduce this using the LIMIT Clause, e.g. LIMIT 10 at the end of the query.

series_name producer_name
Better Call Saul Mark Johnson
Better Call Saul Vince Gilligan
Better Call Saul Unlinked Producer
Better Call Saul Kevin S. Bright
Better Call Saul Marta Kauffman
Better Call Saul David Benioff
Better Call Saul D. B. Weiss
Big Little Lies Marta Kauffman
Big Little Lies Vince Gilligan
Big Little Lies Mark Johnson

Common Errors and Solutions

Error Message:

ERROR: column reference "name" is ambiguous


This error happens when there are columns in multiple tables with the same name, and PostgreSQL doesn’t know which one to use.


Always specify the table name along with the column name like so: table_name.column_name.

Best Practices and Tips

  • Use CROSS JOIN sparingly and only when you are certain that you need a Cartesian product. It can put a heavy load on the system.
  • It’s often more efficient to use other JOIN types or to apply conditions to restrict the number of rows when possible.
  • Always assess the potential impact on performance before running a CROSS JOIN, especially on large tables.


CROSS JOIN is a unique tool in your SQL toolkit. While not commonly used in everyday queries, it serves particular use cases that other JOIN types can’t cover. Understanding when and how to use it is key to mastering PostgreSQL JOIN operations. Stay tuned for more insights and tutorials on PostgreSQL features!

Leave a Reply