Mastering Joins in SQL Server: Inner, Outer, Left, and Right Explained

Nile Bits
5 min readJul 29, 2023

--

Mastering Joins in SQL Server: Inner, Outer, Left, and Right Explained

# Mastering Joins in SQL Server: Inner, Outer, Left, and Right Explained

When working with relational databases, one of the most fundamental operations is combining data from multiple tables using joins. SQL Server offers various types of joins to cater to different scenarios, and mastering these join types is essential for efficient and effective database querying. In this blog post, we will explore the different join types available in SQL Server with code examples to illustrate their usage.

## Understanding the Sample Database

Before we dive into the join types, let’s consider a simple sample database to work with. For the purpose of this post, we’ll use two hypothetical tables: `Customers` and `Orders`.

### Customers Table
| CustomerID | Name | Email | Country |
| — — — — — — | — — — — — — | — — — — — — — — — -| — — — — — — |
| 1 | John Smith | john@example.com | USA |
| 2 | Jane Doe | jane@example.com | Canada |
| 3 | Alex Wong | alex@example.com | Australia |

### Orders Table
| OrderID | CustomerID | OrderDate | TotalAmount |
| — — — — -| — — — — — — | — — — — — — | — — — — — — -|
| 101 | 1 | 2023–01–15 | 150.00 |
| 102 | 2 | 2023–02–20 | 75.00 |
| 103 | 1 | 2023–03–10 | 200.00 |
| 104 | 3 | 2023–04–05 | 50.00 |

## 1. Inner Join

An inner join returns only the rows that have matching values in both tables based on the specified join condition. It filters out the rows that do not have corresponding matches in both tables.

```sql
SELECT Customers.Name, Orders.OrderID, Orders.TotalAmount
FROM Customers
INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
```

**Result:**
| Name | OrderID | TotalAmount |
| — — — — — — | — — — — -| — — — — — — -|
| John Smith | 101 | 150.00 |
| John Smith | 103 | 200.00 |
| Jane Doe | 102 | 75.00 |
| Alex Wong | 104 | 50.00 |

In the example above, only the customers with matching orders are returned in the result set.

## 2. Left Join (or Left Outer Join)

A left join returns all the rows from the left table and the matching rows from the right table. If there is no match in the right table, the result will contain NULL values for the right table columns.

```sql
SELECT Customers.Name, Orders.OrderID, Orders.TotalAmount
FROM Customers
LEFT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
```

**Result:**
| Name | OrderID | TotalAmount |
| — — — — — — | — — — — -| — — — — — — -|
| John Smith | 101 | 150.00 |
| John Smith | 103 | 200.00 |
| Jane Doe | 102 | 75.00 |
| Alex Wong | 104 | 50.00 |
| Jane Doe | NULL | NULL |

In the above example, the left join includes all customers, and if a customer has no order, the `OrderID` and `TotalAmount` columns will contain NULL.

## 3. Right Join (or Right Outer Join)

A right join is similar to a left join, but it returns all the rows from the right table and the matching rows from the left table. If there is no match in the left table, the result will contain NULL values for the left table columns.

```sql
SELECT Customers.Name, Orders.OrderID, Orders.TotalAmount
FROM Customers
RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
```

**Result:**
| Name | OrderID | TotalAmount |
| — — — — — — | — — — — -| — — — — — — -|
| John Smith | 101 | 150.00 |
| John Smith | 103 | 200.00 |
| Jane Doe | 102 | 75.00 |
| Alex Wong | 104 | 50.00 |
| NULL | 105 | 300.00 |

In this example, the right join includes all orders, and if an order has no corresponding customer, the `Name` column will contain NULL.

## 4. Full Outer Join

A full outer join returns all rows from both tables, with NULL values in the columns of the table that does not have a corresponding match in the other table.

```sql
SELECT Customers.Name, Orders.OrderID, Orders.TotalAmount
FROM Customers
FULL OUTER JOIN Orders ON Customers.CustomerID = Orders.CustomerID;
```

**Result:**
| Name | OrderID | TotalAmount |
| — — — — — — | — — — — -| — — — — — — -|
| John Smith | 101 | 150.00 |
| John Smith | 103 | 200.00 |
| Jane Doe | 102 | 75.00 |
| Alex Wong | 104 | 50.00 |
| NULL | 105 | 300.00 |

In this example, the full outer join returns all customers and orders, and if there is no match on either side, the respective columns will contain NULL.

## Conclusion

Understanding different join types in SQL Server is crucial for crafting complex queries and fetching data from multiple related tables. By mastering inner, outer, left, and right joins, you can manipulate data effectively to derive valuable insights from your database.

Keep in mind that the examples presented here are simplified for educational purposes. In real-world scenarios, databases may have more complex structures and relationships. But with a solid understanding of join types, you are well-equipped to handle more intricate SQL queries in your SQL Server projects.

--

--

Nile Bits

We Build Digital Solutions Suitable For Each Business Size. Accelerate your digital transformation with Nile Bits. https://www.nilebits.com/