KG Sosa
KG Sosa

Reputation: 22053

LEFT JOIN vs. LEFT OUTER JOIN in SQL Server

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

Upvotes: 2098

Views: 2183975

Answers (12)

frozenjim
frozenjim

Reputation: 806

I find it easier to think of Joins in the following order:

  • CROSS JOIN - a Cartesian product of both tables. ALL joins begin here
  • INNER JOIN - a CROSS JOIN with a filter added.
  • OUTER JOIN - an INNER JOIN with missing elements (from either LEFT or RIGHT table) added afterward.

Until I figured out this (relatively) simple model, JOINS were always a bit more of a black art. Now they make perfect sense.

Upvotes: 62

andrefsp
andrefsp

Reputation: 857

I'm a PostgreSQL DBA. The difference between outer or not outer joins is a topic that has considerable discussion all around the internet.

If you look in PostgreSQL documentation:

The words INNER and OUTER are optional in all forms. INNER is the default; LEFT, RIGHT, and FULL imply an outer join. (http://www.postgresql.org/docs/8.4/static/queries-table-expressions.html)

In other words,

LEFT JOIN and LEFT OUTER JOIN ARE THE SAME

RIGHT JOIN and RIGHT OUTER JOIN ARE THE SAME

Upvotes: 84

mass
mass

Reputation: 672

In Sql Server joins syntax OUTER is optional.

https://msdn.microsoft.com/en-us/library/ms177634(v=sql.130).aspx

Equivalent join syntaxes with and without OUTER:

LEFT OUTER JOIN => LEFT JOIN
RIGHT OUTER JOIN => RIGHT JOIN
FULL OUTER JOIN => FULL JOIN

Other equivalent syntaxes:

INNER JOIN => JOIN
CROSS JOIN => ,

Illustration from Dotnet Mob article (strongly recommended) Joins in Sql Server:

enter image description here

Upvotes: 54

san
san

Reputation: 1515

JOINs:

  1. INNER JOIN = JOIN

  2. OUTER JOIN

    • LEFT OUTER JOIN = LEFT JOIN
    • RIGHT OUTER JOIN = RIGHT JOIN
    • FULL OUTER JOIN = FULL JOIN
  3. CROSS JOIN

Self-JOIN: This is not exactly a separate type of join. This is joining a table to itself using one of the above joins. You will hear this term from many in the SQL Developer community.

There are two APPLY operators:

  1. CROSS APPLY: Similar to INNER JOIN (But has the added advantage of being able to compute something in the right table for each row of the left table and returns only the matching rows.)
  2. OUTER APPLY: Similar to LEFT OUTER JOIN (But has the added advantage of being able to compute something in the right table for each row of the left table and returns all the rows from the left table irrespective of a match on the right table.)

https://www.mssqltips.com/sqlservertip/1958/sql-server-cross-apply-and-outer-apply/

https://sqlhints.com/2016/10/23/outer-apply-in-sql-server/

Real life example, when to use OUTER / CROSS APPLY in SQL

The APPLY operators are very beneficial as they give better performance than doing the same computation in a subquery. They are also a replacement of many analytical functions in older versions of SQL Server. So after being comfortable with JOINS a SQL developer should learn the APPLY operators.

Upvotes: 21

Delickate
Delickate

Reputation: 1120

There are only 3 joins:

  • Cross Join = Cartesian Join (E.g: Table A, Table B)

  • Inner Join = JOIN (E.g: Table A Join / Inner Join Table B)

  • Outer Join

    There are three types:

    • Left Outer Join = Left Join
    • Right Outer Join = Right Join
    • Full Outer Join = Full Join

Upvotes: 32

sactiw
sactiw

Reputation: 22471

There is no difference between LEFT JOIN and LEFT OUTER JOIN, they are exactly same.

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

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

  2. OUTER JOINs 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 times m pairings that join everything to everything. That is similar to where we simply list 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 an INNER JOIN.
  • An OUTER join has to be LEFT | RIGHT | FULL; you can not simply say OUTER JOIN.
  • You can drop the OUTER keyword and just say LEFT JOIN or RIGHT JOIN or FULL JOIN.

A Visual Explanation of SQL Joins

Upvotes: 906

Lasse V. Karlsen
Lasse V. Karlsen

Reputation: 391596

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?.

Upvotes: 2765

WorkSmarter
WorkSmarter

Reputation: 3808

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. Working examples of each query have been provided via SQL Fiddle. This tool will allow for hands on manipulation of the query.

Given

enter image description here

Left Join and Left Outer Join

enter image description here

Results

enter image description here


Right Join and Right Outer Join

enter image description here

Results

enter image description here

Upvotes: 95

Mitch Wheat
Mitch Wheat

Reputation: 300728

What is the difference between left join and left outer join?

Nothing. LEFT JOIN and LEFT OUTER JOIN are equivalent.

Upvotes: 453

Yugo Amaryl
Yugo Amaryl

Reputation: 1279

Why are LEFT/RIGHT and LEFT OUTER/RIGHT OUTER the same? Let's explain why this vocabulary. Understand that LEFT and RIGHT joins are specific cases of the OUTER join, and therefore couldn't be anything else than OUTER LEFT/OUTER RIGHT. The OUTER join is also called FULL OUTER as opposed to LEFT and RIGHT joins that are PARTIAL results of the OUTER join. Indeed:

Table A | Table B     Table A | Table B      Table A | Table B      Table A | Table B
   1    |   5            1    |   1             1    |   1             1    |   1
   2    |   1            2    |   2             2    |   2             2    |   2
   3    |   6            3    |  null           3    |  null           -    |   -
   4    |   2            4    |  null           4    |  null           -    |   -
                        null  |   5             -    |   -            null  |   5
                        null  |   6             -    |   -            null  |   6

                      OUTER JOIN (FULL)     LEFT OUTER (partial)   RIGHT OUTER (partial)

It is now clear why those operations have aliases, as well as it is clear only 3 cases exist: INNER, OUTER, CROSS. With two sub-cases for the OUTER. The vocabulary, the way teachers explain this, as well as some answers above, often make it looks like there are lots of different types of join. But it's actually very simple.

Upvotes: 43

Unsliced
Unsliced

Reputation: 10552

Syntactic sugar, makes it more obvious to the casual reader that the join isn't an inner one.

Upvotes: 20

Harsh
Harsh

Reputation: 247

There are mainly three types of JOIN

  1. Inner: fetches data, that are present in both tables
    • Only JOIN means INNER JOIN
  2. Outer: are of three types

    • LEFT OUTER - - fetches data present only in left table & matching condition
    • RIGHT OUTER - - fetches data present only in right table & matching condition
    • FULL OUTER - - fetches data present any or both table
    • (LEFT or RIGHT or FULL) OUTER JOIN can be written w/o writing "OUTER"
  3. Cross Join: joins everything to everything

Upvotes: 23

Related Questions