We use LEFT JOIN or RIGHT JOIN to combine data from two tables, keeping all rows from one table and matching rows from the other.
LEFT JOIN vs RIGHT JOIN decision in SQL
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
SQL
SELECT columns FROM table1 LEFT JOIN table2 ON table1.common_column = table2.common_column;
LEFT JOIN keeps all rows from the first (left) table.
RIGHT JOIN keeps all rows from the second (right) table.
Examples
SQL
SELECT employees.name, departments.name FROM employees LEFT JOIN departments ON employees.dept_id = departments.id;
SQL
SELECT employees.name, departments.name FROM employees RIGHT JOIN departments ON employees.dept_id = departments.id;
Sample Program
This query lists all employees with their departments. Employees without a department show NULL in the department column.
SQL
CREATE TABLE employees (id INT, name VARCHAR(20), dept_id INT); CREATE TABLE departments (id INT, name VARCHAR(20)); INSERT INTO employees VALUES (1, 'Alice', 10), (2, 'Bob', NULL), (3, 'Charlie', 20); INSERT INTO departments VALUES (10, 'HR'), (20, 'IT'), (30, 'Sales'); SELECT employees.name AS employee, departments.name AS department FROM employees LEFT JOIN departments ON employees.dept_id = departments.id;
Important Notes
You can rewrite a RIGHT JOIN as a LEFT JOIN by switching table order.
LEFT JOIN is more common and easier to read for beginners.
Use LEFT JOIN or RIGHT JOIN depending on which table's data you want to keep fully.
Summary
LEFT JOIN keeps all rows from the first table, RIGHT JOIN keeps all from the second.
Choose LEFT or RIGHT JOIN based on which table's data you want to keep completely.
You can switch table order to use only LEFT JOIN if preferred.
Practice
1. Which JOIN type keeps all rows from the first (left) table, even if there is no matching row in the second (right) table?
easy
Solution
Step 1: Understand LEFT JOIN behavior
LEFT JOIN returns all rows from the first table and matching rows from the second table. If no match, NULLs appear for second table columns.Step 2: Compare with RIGHT JOIN
RIGHT JOIN keeps all rows from the second table, not the first. INNER JOIN only returns matching rows. FULL JOIN returns all rows from both tables.Final Answer:
LEFT JOIN -> Option CQuick Check:
LEFT JOIN keeps all left table rows [OK]
Hint: LEFT JOIN keeps all from first table, RIGHT JOIN from second [OK]
Common Mistakes:
- Confusing LEFT JOIN with RIGHT JOIN
- Thinking INNER JOIN keeps unmatched rows
- Assuming FULL JOIN keeps only one table's rows
2. Which of the following is the correct syntax to perform a RIGHT JOIN between tables
Employees and Departments on Employees.DeptID = Departments.ID?easy
Solution
Step 1: Check JOIN syntax correctness
RIGHT JOIN requires ON clause to specify join condition. SELECT * FROM Employees RIGHT JOIN Departments ON Employees.DeptID = Departments.ID; uses correct syntax with ON clause.Step 2: Identify errors in other options
SELECT * FROM Employees LEFT JOIN Departments ON Employees.DeptID = Departments.ID; uses LEFT JOIN, not RIGHT JOIN. SELECT * FROM Employees RIGHT JOIN Departments WHERE Employees.DeptID = Departments.ID; uses WHERE instead of ON, which is incorrect for JOIN condition. SELECT * FROM Employees JOIN Departments ON Employees.DeptID = Departments.ID; uses JOIN without specifying LEFT or RIGHT, defaults to INNER JOIN.Final Answer:
SELECT * FROM Employees RIGHT JOIN Departments ON Employees.DeptID = Departments.ID; -> Option AQuick Check:
RIGHT JOIN needs ON clause [OK]
Hint: RIGHT JOIN syntax requires ON, not WHERE [OK]
Common Mistakes:
- Using WHERE instead of ON for join condition
- Confusing LEFT JOIN with RIGHT JOIN syntax
- Omitting JOIN type defaults to INNER JOIN
3. Given tables
Assuming Authors has 3 rows and Books has 2 rows, with one author having no books, what will the output include?
Authors and Books, what will be the result of this query?SELECT Authors.Name, Books.Title FROM Authors LEFT JOIN Books ON Authors.ID = Books.AuthorID;
Assuming Authors has 3 rows and Books has 2 rows, with one author having no books, what will the output include?
medium
Solution
Step 1: Understand LEFT JOIN output
LEFT JOIN keeps all rows from Authors (left table). For authors without matching books, Books.Title will be NULL.Step 2: Analyze given data
Authors has 3 rows, Books has 2 rows. One author has no books, so that author appears with NULL for book title.Final Answer:
All 3 authors with their book titles; NULL for authors without books -> Option BQuick Check:
LEFT JOIN keeps all left rows, fills NULLs for no match [OK]
Hint: LEFT JOIN keeps all left rows, unmatched right columns are NULL [OK]
Common Mistakes:
- Thinking unmatched left rows are excluded
- Confusing LEFT JOIN with INNER JOIN
- Assuming unmatched right rows appear in LEFT JOIN
4. You wrote this query but it returns fewer rows than expected:
What is the likely mistake?
SELECT * FROM Orders RIGHT JOIN Customers ON Orders.CustomerID = Customers.ID;
What is the likely mistake?
medium
Solution
Step 1: Identify which table's rows to keep
If Orders is the main table and you want all its rows, LEFT JOIN should be used, not RIGHT JOIN.Step 2: Understand RIGHT JOIN effect
RIGHT JOIN keeps all rows from Customers (right table), so if Orders has rows without matching Customers, those rows are excluded.Final Answer:
Using RIGHT JOIN instead of LEFT JOIN when Orders is the main table -> Option DQuick Check:
Use LEFT JOIN to keep all left table rows [OK]
Hint: Use LEFT JOIN to keep all rows from first table [OK]
Common Mistakes:
- Confusing LEFT and RIGHT JOIN roles
- Expecting RIGHT JOIN to keep left table rows
- Ignoring join direction impact on row count
5. You have two tables:
Which query is best and why?
Students (left) and Enrollments (right). You want a list of all students, including those not enrolled in any course, showing NULL for missing enrollment data.Which query is best and why?
Option A: SELECT * FROM Students LEFT JOIN Enrollments ON Students.ID = Enrollments.StudentID;
Option B: SELECT * FROM Enrollments RIGHT JOIN Students ON Students.ID = Enrollments.StudentID;
hard
Solution
Step 1: Identify which table's rows to keep
You want all students, even those without enrollments, so keep all rows from Students (left table).Step 2: Choose JOIN type accordingly
LEFT JOIN keeps all rows from Students and matches enrollments or shows NULL if none. RIGHT JOIN would keep all enrollments, not all students.Final Answer:
Option A, because LEFT JOIN keeps all students and matches enrollments -> Option AQuick Check:
LEFT JOIN keeps all left table rows [OK]
Hint: Keep main table first, use LEFT JOIN to keep all its rows [OK]
Common Mistakes:
- Using RIGHT JOIN but expecting all left table rows
- Switching table order without adjusting JOIN type
- Assuming RIGHT JOIN keeps left table rows
