Curriculum
in this tutorial, you will learn about the SQL Server LEFT JOIN
 clause and how to query data from multiple tables.
LEFT JOIN
 clauseThe LEFT JOIN
 is a clause of the SELECT statement. The LEFT JOIN
 clause allows you to query data from multiple tables.
The LEFT JOIN
 returns all rows from the left table and the matching rows from the right table. If no matching rows are found in the right table, NULL
 are used.
The following illustrates how to join two tables T1 and T2 using the LEFT JOIN
 clause:
SELECT select_list FROM T1 LEFT JOIN T2 ON join_predicate;
In this syntax, T1 and T2 are the left and right tables, respectively.
For each row from the T1 table, the query compares it with all the rows from the T2 table. If a pair of rows causes the join predicate to evaluate to TRUE
, the column values from these rows will be combined to form a new row which is then included in the result set.
If a row from the left table (T1) does not have any matching row from the T2 table, the query combines column values of the row from the left table with NULL
 for each column values from the right table.
In short, the LEFT JOIN
 clause returns all rows from the left table (T1) and matching rows or NULL
 values from the right table (T2).
In this illustration, no row from the T2 table matches row 1 from the T1 table; therefore, NULL is used. Rows 2 and 3 from the T1 table match rows A and B from the T2 table, respectively.
LEFT JOIN
 exampleEach sales order item includes one product. The link between the order_items
 and the products
 tables is the product_id
 column.
The following statement uses the LEFT JOIN
 clause to query data from the products
 and order_items
 tables:
SELECT product_name, order_id FROM production.products p LEFT JOIN sales.order_items o ON o.product_id = p.product_id ORDER BY order_id;
As you see clearly from the result set, a list of NULL
 in the order_id
 column indicates that the corresponding products have not been sold to any customer yet.
It is possible to use the WHERE clause to limit the result set. The following query returns the products that do not appear in any sales order:
SELECT product_name, order_id FROM production.products p LEFT JOIN sales.order_items o ON o.product_id = p.product_id WHERE order_id IS NULL ORDER BY order_id;
As always, SQL Server processes the WHERE
 clause after the LEFT JOIN
 clause.
The following example shows how to join three tables:Â production.products
, sales.orders
, and sales.order_items
 using the LEFT JOIN
 clauses:
SELECT p.product_name, o.order_id, i.item_id, o.order_date FROM production.products p LEFT JOIN sales.order_items i ON i.product_id = p.product_id LEFT JOIN sales.orders o ON o.order_id = i.order_id ORDER BY order_id;
Here is the output:
LEFT JOIN
: conditions in ON
 vs. WHERE
 clauseThe following query finds the products that belong to the order id 100:
SELECT product_name, order_id FROM production.products p LEFT JOIN sales.order_items o ON o.product_id = p.product_id WHERE order_id = 100 ORDER BY order_id;
Let’s move the condition order_id = 100
 to the ON
 clause:
SELECT p.product_id, product_name, order_id FROM production.products p LEFT JOIN sales.order_items o ON o.product_id = p.product_id AND o.order_id = 100 ORDER BY order_id DESC;
The query returned all products, but only the order with id 100 has the associated product’s information.
Note that for the INNER JOIN clause, the condition in theÂ
ON
 clause is functionally equivalent if it is placed in the WHERE
 clause.