LEFT JOINは、結合元のテーブル(左のテーブルと呼ぶ)にある行はすべて残し、結合先のテーブル(右のテーブルと呼ぶ)に一致するデータがない場合は、NULLを補って結合結果に含める。
https://www.postgresql.jp/docs/9.4/queries-table-expressions.html
postgresdb1=# SELECT * FROM users;
id | name
----+-------
1 | Alice
2 | Bob
3 | Carol
(3 行)
postgresdb1=# SELECT * FROM test_results;
id | user_id | score
----+---------+-------
1 | 1 | 85
2 | 3 | 90
(2 行)
postgresdb1=# SELECT
users.name,
test_results.score
FROM
users
JOIN
test_results ON users.id = test_results.user_id;
name | score
-------+-------
Alice | 85
Carol | 90
(2 行)
postgresdb1=# SELECT
users.name,
test_results.score
FROM
users
LEFT JOIN
test_results ON users.id = test_results.user_id;
name | score
-------+-------
Alice | 85
Carol | 90
Bob |
(3 行)
postgresdb1=#JOINだけだとテストを受けていないBobの行は表示されないが、LEFT JOINだとBobの行もscoreが空欄で表示される。