← Back to Questions
SQL

What is the difference between EXISTS and IN?

Learn What is the difference between EXISTS and IN? with simple explanations, real-time examples, interview tips and practical use cases.

What is the Difference Between EXISTS and IN in SQL?

EXISTS and IN are SQL operators used to filter data based on subquery results.

In simple words:

  • IN checks whether a value exists in a list of values
  • EXISTS checks whether a subquery returns any rows

Why EXISTS and IN are Important

Enterprise applications frequently need:

  • Data filtering
  • Relationship checking
  • Existence validation
  • Conditional data retrieval

EXISTS and IN help:

  • Write efficient subqueries
  • Improve query readability
  • Handle relational data checks

Main Difference Between EXISTS and IN

Feature IN EXISTS
Checks Value match in list Whether rows exist
Subquery Result Compares values Checks row existence only
Performance Better for small datasets Better for large datasets
Execution Style Processes full subquery result Stops after first match
NULL Handling Can be affected by NULLs Not affected much

What is IN?

IN operator checks:

Whether a value exists inside a list or subquery result.


IN Syntax

SELECT column_name

FROM table_name

WHERE column_name IN (

    SELECT column_name
    FROM another_table

);

IN Example

Students Table:

Student Course ID
Naresh 101
Rahul 102
Arjun 103

Courses Table

Course ID Duration
101 3
102 8
103 10

Requirement

Find students enrolled in courses longer than 6 months.


IN Query

SELECT student_name

FROM students

WHERE course_id IN (

    SELECT course_id

    FROM courses

    WHERE duration > 6

);

How IN Works Internally

Step 1

Inner query executes:

SELECT course_id
FROM courses
WHERE duration > 6;

Result

102, 103

Step 2

Outer query becomes:

WHERE course_id IN (102, 103)

Final Result

  • Rahul
  • Arjun

IN Query Flow

Execute Subquery
       |
       v
Get Value List
       |
       v
Compare Outer Query Values
       |
       v
Return Matching Rows

What is EXISTS?

EXISTS checks:

Whether the subquery returns at least one row.


EXISTS Syntax

SELECT column_name

FROM table_name outer_table

WHERE EXISTS (

    SELECT 1

    FROM another_table inner_table

    WHERE outer_table.column =
          inner_table.column

);

EXISTS Example

Find students who have enrollments.


Query

SELECT s.student_name

FROM students s

WHERE EXISTS (

    SELECT 1

    FROM enrollments e

    WHERE s.student_id = e.student_id

);

How EXISTS Works Internally

Step 1

Outer query reads:

Naresh

Step 2

Subquery checks:

Does enrollment exist for Naresh?

Step 3

If at least one row exists:

  • Condition becomes TRUE

Important Point

EXISTS does NOT care about:

  • Actual returned values

It checks only:

  • Whether rows exist

Why SELECT 1 is Used?

Because:

  • Actual value does not matter

EXISTS Query Flow

Outer Query Reads Row
        |
        v
Subquery Checks Existence
        |
        v
At Least One Row Found?
      /        \
    Yes         No
     |           |
     v           v
 TRUE         FALSE

Performance Difference

IN Operator

  • Processes entire subquery result

EXISTS Operator

  • Stops immediately after first match

Why EXISTS is Faster for Large Data?

Because:

  • Database stops searching once match found

Performance Example

Suppose:

  • Subquery returns 10 million rows

IN Behavior

Database may process:

  • All 10 million rows

EXISTS Behavior

Database stops:

  • After first matching row

NULL Handling Difference

IN Operator

Can behave unexpectedly with:

  • NULL values

Example

WHERE department_id IN (1, 2, NULL)

EXISTS Operator

Usually handles NULLs better.


EXISTS vs IN Internal Architecture

IN

Execute Entire Subquery
          |
          v
Create Value List
          |
          v
Compare Values

EXISTS

Check First Matching Row
          |
          v
Match Found?
      /       \
    Yes        No
     |
     v
Stop Execution

When to Use IN

  • Small subquery results
  • Simple value comparisons
  • Readable filtering logic

When to Use EXISTS

  • Large datasets
  • Correlated subqueries
  • Existence checks
  • Performance-sensitive queries

NOT IN vs NOT EXISTS

NOT IN

Can fail unexpectedly with:

  • NULL values

NOT EXISTS

Safer and more reliable.


Example

SELECT s.student_name

FROM students s

WHERE NOT EXISTS (

    SELECT 1

    FROM enrollments e

    WHERE s.student_id = e.student_id

);

Result

Students without enrollments.


Real-Time Banking Example

Banking systems use EXISTS for:

  • Checking account existence
  • Fraud detection
  • Transaction validations

Example

Check whether customer has active account.

Real-Time E-Commerce Example

E-commerce platforms use EXISTS for:

  • Order existence checks
  • Inventory validations
  • Payment verification

Example

Check whether product exists in cart.

Real-Time Learning Platform Example

Learning platforms use EXISTS for:

  • Enrollment checks
  • Certificate verification
  • Course completion validation

EXISTS and IN in Microservices

Microservices use:

  • EXISTS for validation APIs
  • IN for filtering operations

Advantages of EXISTS

  • Better performance on large datasets
  • Stops after first match
  • Efficient for correlated subqueries

Advantages of IN

  • Simple syntax
  • Readable queries
  • Good for small result sets

Disadvantages of EXISTS

  • Can look complex for beginners

Disadvantages of IN

  • Can be slower for large datasets
  • NULL handling issues

Performance Consideration

For large enterprise databases:

  • EXISTS is often preferred

Best Practices

  • Use EXISTS for large correlated queries
  • Use IN for small value lists
  • Be careful with NULLs in NOT IN
  • Analyze execution plans for optimization

Common Interview Mistake

Many developers think:

  • EXISTS and IN always behave identically

Reality

Their:

  • Execution strategy
  • Performance
  • NULL handling

can differ significantly.


Related Learning Topics


Professional Interview Answer

IN and EXISTS are SQL operators used with subqueries, but they work differently. The IN operator checks whether a value exists within a list returned by a subquery, while EXISTS checks whether the subquery returns at least one row. IN is generally suitable for smaller datasets and simple comparisons, whereas EXISTS is more efficient for large datasets and correlated subqueries because it stops processing after finding the first matching row. EXISTS also handles NULL values more reliably in many cases. In enterprise systems, EXISTS is often preferred for performance-sensitive queries and validation checks.


Why Interviewers Like This Answer

  • Clearly explains execution differences
  • Includes performance comparison
  • Shows NULL handling awareness
  • Provides enterprise-level understanding
  • Explains optimization considerations

Frequently Asked Questions

What is the difference between EXISTS and IN?

IN checks value matching, while EXISTS checks whether rows exist.

Which is faster: EXISTS or IN?

EXISTS is usually faster for large datasets.

Why is EXISTS faster?

Because EXISTS stops searching after finding the first match.

When should IN be used?

IN is useful for small value lists and simple filtering.

Which handles NULL values better?

EXISTS generally handles NULLs more reliably than IN.

Why this SQL question is important?

This interview question helps candidates understand real-time backend development concepts, practical problem solving, coding fundamentals, system design basics and production-ready application behavior.

Practice this question carefully for Java backend roles, Spring Boot developer interviews, microservices interviews, company interviews and full-stack developer preparation.

About the Author

Naresh Kumar is a Senior Java Backend Engineer with experience building enterprise applications using Java, Spring Boot, Microservices, Docker, Kubernetes and Cloud technologies.