Reviewed by Aditya Kumar · Last reviewed 2026-03-24
INNER JOIN returns only rows with matches in both tables. LEFT JOIN returns all rows from the left table and matching rows from the right, with NULLs for non matches. RIGHT JOIN is symmetrical,…
Red Flag: Not knowing when result rows can explode (e.g., many-to-many without intent). Pro-Move: Say you always validate cardinality after joins—'I expect 1:1 here, so I check for duplicates.'
This medium-level SQL question appears frequently in data engineering interviews at companies like Accenture, Cognizant, EPAM, and 1 others. While less common, it tests deeper understanding that distinguishes strong candidates. Mastering the underlying concepts (join) will help you answer variations of this question confidently.
Break this problem into components. Identify the core trade-offs involved, then walk the interviewer through your reasoning step by step. Demonstrate awareness of edge cases and production considerations - this is what separates good answers from great ones. The expert answer includes a code example that demonstrates the implementation pattern.
INNER JOIN returns only rows with matches in both tables. LEFT JOIN returns all rows from the left table and matching rows from the right, with NULLs for non-matches. RIGHT JOIN is symmetrical, returning all rows from the right table and matches from the left. FULL JOIN returns all rows from both tables, filling non-matches with NULLs.
The choice of join fundamentally dictates the result set's cardinality and semantic meaning.
INNER JOIN: Includes only rows where the join condition is met in both* tables, yielding the intersection of the two datasets based on the join key.
LEFT JOIN (or LEFT OUTER JOIN): Returns all rows from the left* table. If a row in the left table has no match in the right, NULL values are returned for the right table's columns. Commonly used to enrich a primary dataset (left) with attributes from a secondary dataset (right).
RIGHT JOIN (or RIGHT OUTER JOIN): Symmetrical to LEFT JOIN. Returns all rows from the right* table, with NULLs for non-matching left table columns. Less common, as most queries can be rephrased as a LEFT JOIN.
FULL JOIN (or FULL OUTER JOIN): Returns all rows from both* tables. If a row from one table has no match in the other, NULLs are returned for the non-matching table's columns. Useful for comprehensive comparisons or merging disparate datasets.
Using the wrong join leads to incorrect data, impacting aggregations and business decisions.
LEFT JOIN to a dimension table, it's crucial to ensure the join key in the dimension table is unique. A non-unique key will cause fact rows to duplicate, leading to incorrect metrics. Data quality checks and unique key constraints (e.g., enforced in dbt models) are vital.
SELECT
f.order_id,
f.order_date,
d.customer_name
FROM
fact_orders f
LEFT JOIN
dim_customers d ON f.customer_id = d.customer_id;
This example enriches fact_orders with customer_name, even if a customer doesn't exist in dim_customers (resulting in NULL for customer_name).
In the interview, also mention the importance of join key data types and handling NULL values in join conditions.
Red Flag: Not knowing when result rows can explode (e.g., many-to-many without intent). Pro-Move: Say you always validate cardinality after joins—'I expect 1:1 here, so I check for duplicates.'
Some links below are affiliate links. If you buy through them we may earn a small commission at no extra cost to you — it helps keep DataEngPrep free.
According to DataEngPrep.tech, this is one of the most frequently asked SQL interview questions, reported at 4 companies. DataEngPrep.tech maintains an editor-reviewed database of 1,863 data engineering interview questions across 7 categories.