Interview kitsBlog

Your dream job? Lets Git IT.
Interactive technical interview preparation platform designed for modern developers.

XGitHub

Platform

  • Categories

Resources

  • Blog
  • About the app
  • FAQ
  • Feedback

Legal

  • Privacy Policy
  • Terms of Service

© 2026 LetsGit.IT. All rights reserved.

LetsGit.IT/Categories/Databases
Databasesmedium

INNER JOIN vs LEFT JOIN — what’s the difference?

Tags
#sql#join#inner-join#left-join
Back to categoryPractice quiz

Answer

INNER JOIN returns only rows that match in both tables. LEFT JOIN returns all rows from the left table and fills missing matches from the right side with NULLs.

SELECT u.id, p.id
FROM users u
LEFT JOIN posts p ON p.user_id = u.id;

Advanced answer

Deep dive

Joins combine rows from two tables based on a join condition.

  • `INNER JOIN`: keep only pairs that match the join condition.
  • `LEFT JOIN`: keep all rows from the left table; if there’s no match on the right, right-side columns are `NULL`.

Example

Customers with orders (INNER):

SELECT c.id, o.id AS order_id
FROM customers c
JOIN orders o ON o.customer_id = c.id;

Customers even without orders (LEFT):

SELECT c.id, o.id AS order_id
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id;

Common pitfall (WHERE turns LEFT into INNER)

If you put a condition on the right table in `WHERE`, you can filter out the `NULL` rows and effectively lose the left-join behavior:

-- This removes customers with no orders
... LEFT JOIN orders o ON o.customer_id = c.id
WHERE o.status = 'PAID';

To keep left rows, move conditions into the `ON` clause:

... LEFT JOIN orders o
  ON o.customer_id = c.id AND o.status = 'PAID';

Practical notes

  • `RIGHT JOIN` is symmetric (swap sides).
  • `FULL OUTER JOIN` keeps rows from both sides (not always available in every DB).

Related questions

Databases
Why can `LIKE '%term%'` be slow and what are common alternatives?
#sql#like#indexes
Databases
SQL NULL: why is `col = NULL` not true and what should you use?
#sql#null#three-valued-logic
Databases
Why is `SELECT *` risky in production queries?
#sql#best-practices#performance
Databases
What is a window function in SQL and a typical use case?
#sql#window-functions#row_number
Databases
GROUP BY vs HAVING — what’s the difference?
#sql#group-by#having
Databases
SQL vs NoSQL?
#sql#nosql#comparison