JOINS in PostgreSQL

Understanding JOINS in PostgreSQL: An Overview

In relational databases, data is typically distributed across multiple tables. Often, there’s a need to combine rows from two or more tables based on related columns. This operation is achieved using SQL JOINs. PostgreSQL offers a rich set of JOIN operations, and in this tutorial, we’ll provide an overview to help you understand this essential SQL concept.

What is a JOIN?

A JOIN clause in SQL is used to combine rows from two or more tables based on a related column between them. This helps in fetching related data across tables in a single query, allowing for more meaningful and comprehensive data retrieval.

Types of JOINs in PostgreSQL:

PostgreSQL offers a variety of JOIN types:

  1. INNER JOIN (or JOIN): This is the most common type of JOIN. It returns rows when there’s a match in both tables.

  2. LEFT JOIN (or LEFT OUTER JOIN): Returns all rows from the left table and the matched rows from the right table. If there’s no match, the result is NULL on the right side.

  3. RIGHT JOIN (or RIGHT OUTER JOIN): Similar to the LEFT JOIN but fetches all rows from the right table and the matched rows from the left table. If there’s no match, the result is NULL on the left side.

  4. FULL JOIN (or FULL OUTER JOIN): Combines the results of both LEFT and RIGHT JOINs. It returns rows when there’s a match in one of the tables. Thus, it returns all rows from both tables with matching rows in both sides where available. If there’s no match, the missing side will contain NULL.

  5. CROSS JOIN: As the name suggests, it does a cartesian product of the two tables. It returns combinatorial rows, i.e., every row of the first table is combined with every row of the second table.

  6. SELF JOIN: This is a technique where a table is joined with itself. It can be useful for finding relationships within a single table.

Basic JOIN Syntax:

Here’s the basic syntax for using a JOIN in PostgreSQL:

SELECT columns
FROM table1
JOIN table2
ON table1.columnX = table2.columnY;

Sample Data:

Consider the following two tables as part of our tv_series dataset:


id name genre
1 Series A Drama
2 Series B Comedy


series_id rating
1 8.5
2 7.8


To retrieve series names and their ratings, an INNER JOIN can be used:

SELECT, tv_series_ratings.rating
FROM tv_series
INNER JOIN tv_series_ratings
ON = tv_series_ratings.series_id;

This will give you:

name rating
Series A 8.5
Series B 7.8

Common Errors and Solutions

Error Message:

ERROR: column "some_column" is ambiguous


This error usually occurs when two tables in the JOIN have columns with the same name and you didn’t specify the table name in your SELECT clause.


To avoid this error, prefix the column name with the table name like so: table_name.column_name.

Tips and Recommendations

  • Use aliases for table names to make your SQL query more readable.
  • Always specify the type of JOIN you’re using for clarity. Avoid using just JOIN as it defaults to INNER JOIN.
  • Be mindful of performance. JOINs can be resource-intensive if not used carefully.


JOINs are a fundamental aspect of SQL and relational databases, allowing data distributed across tables to be combined and queried effectively. This overview provided a brief introduction to the types of JOINs supported by PostgreSQL. We’ll delve deeper into each type, exploring their nuances and use cases, in subsequent posts.

Leave a Reply