Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

LEFT JOIN vs. LEFT OUTER JOIN in SQL Server

What is the difference between LEFT JOIN and LEFT OUTER JOIN?

like image 982
KG Sosa Avatar asked Jan 02 '09 08:01

KG Sosa


People also ask

What is difference between left join and left outer join in SQL Server?

There really is no difference between a LEFT JOIN and a LEFT OUTER JOIN. Both versions of the syntax will produce the exact same result in PL/SQL. Some people do recommend including outer in a LEFT JOIN clause so it's clear that you're creating an outer join, but that's entirely optional.

What is left outer join and left join?

Left Join and Left Outer Join are one and the same. The former is the shorthand for the latter. The same can be said about the Right Join and Right Outer Join relationship. The demonstration will illustrate the equality.

Is left outer join the same as left inner join?

There is no such a thing as a "LEFT INNER JOIN". It's either "LEFT JOIN" or "LEFT OUTER JOIN". "INNER" already means it's the intersection, and the intersection can only be one thing.


2 Answers

To answer your question there is no difference between LEFT JOIN and LEFT OUTER JOIN, they are exactly same that said...

At the top level there are mainly 3 types of joins:

  1. INNER
  2. OUTER
  3. CROSS

  1. INNER JOIN - fetches data if present in both the tables.

  2. OUTER JOIN are of 3 types:

    1. LEFT OUTER JOIN - fetches data if present in the left table.
    2. RIGHT OUTER JOIN - fetches data if present in the right table.
    3. FULL OUTER JOIN - fetches data if present in either of the two tables.
  3. CROSS JOIN, as the name suggests, does [n X m] that joins everything to everything.
    Similar to scenario where we simply lists the tables for joining (in the FROM clause of the SELECT statement), using commas to separate them.


Points to be noted:

  • If you just mention JOIN then by default it is a INNER JOIN.
  • An OUTER join has to be LEFT | RIGHT | FULL you can not simply say OUTER JOIN.
  • You can drop OUTER keyword and just say LEFT JOIN or RIGHT JOIN or FULL JOIN.

For those who want to visualise these in a better way, please go to this link: A Visual Explanation of SQL Joins

like image 21
sactiw Avatar answered Sep 18 '22 17:09

sactiw


As per the documentation: FROM (Transact-SQL):

<join_type> ::=      [ { INNER | { { LEFT | RIGHT | FULL } [ OUTER ] } } [ <join_hint> ] ]     JOIN 

The keyword OUTER is marked as optional (enclosed in square brackets). In this specific case, whether you specify OUTER or not makes no difference. Note that while the other elements of the join clause is also marked as optional, leaving them out will make a difference.

For instance, the entire type-part of the JOIN clause is optional, in which case the default is INNER if you just specify JOIN. In other words, this is legal:

SELECT * FROM A JOIN B ON A.X = B.Y 

Here's a list of equivalent syntaxes:

A LEFT JOIN B            A LEFT OUTER JOIN B A RIGHT JOIN B           A RIGHT OUTER JOIN B A FULL JOIN B            A FULL OUTER JOIN B A INNER JOIN B           A JOIN B 

Also take a look at the answer I left on this other SO question: SQL left join vs multiple tables on FROM line?.

enter image description here

like image 108
Lasse V. Karlsen Avatar answered Sep 19 '22 17:09

Lasse V. Karlsen