Грубо говоря, "left" - это результат всего, что появляется первым во всем предложении FROM при чтении слева направо, включая результат других JOIN, подзапросов, VIEWS и STORED PROCEDURES.
Оба оператора SQL эквивалентны, поскольку оператор =
в части ON
предложения JOIN
равен симметричный (если a = b, то b = a), поэтому результат такой же независимо от порядка.
Обычное объединение показывает только те строки, в которых предложение ON для JOIN имеет значение true, тогда как LEFT JOIN показывает также записи из «left», если условие ложно (показывает NULL для любого столбца из «right», присутствующего в SELECT).
Например:
-- People: -- Car
id | name owner_id | model
---+------------ ---------+------------
1 | Paul 1 | Ferrari
2 | Nancy 2 | Porsche
3 | Arthur NULL | Lamborghini
4 | Alfred 10 | Maserati
> select people.name, car.model from people join car on car.owner_id=people.id;
name | model
---------+--------------
Paul | Ferrari
Nancy | Porsche
2 record(s) found
> select people.name, car.model from people left join car on
car.owner_id=people.id;
name | model
---------+--------------
Paul | Ferrari
Nancy | Porsche
Arthur | NULL
Alfred | NULL
4 record(s) found
> select people.name, car.model from people left join car on
people.id = car.owner_id;
name | model
---------+--------------
Paul | Ferrari
Nancy | Porsche
Arthur | NULL
Alfred | NULL
4 record(s) found