Coding/Learn/sql/sql exists
SQL & Relational Database Engineering Complete Course
01.Introduction & Relational Database Architecture
02.Syntax, Clauses & Execution Order
03.SELECT: Column Projection & Expressions
04.SELECT DISTINCT & Row Deduplication
05.WHERE Clause: Filtering Predicates & Comparison
06.ORDER BY: Sorting, Multi-Column & NULLS Ordering
07.Logical Operators: AND, OR, NOT & Operator Precedence
08.Comments: Single-Line (--), Multi-Line (/* */) & Query Hints
09.Operators: Arithmetic, Bitwise & String Concatenation
10.LIKE Operator & Wildcard Characters (%, _)
11.IN & NOT IN: Membership Operators & Subqueries
12.BETWEEN: Range Filtering for Numbers, Dates & Text
13.NULL Values: Three-Valued Logic, IS NULL & IS NOT NULL
14.Aliases: AS Keyword for Columns & Tables
15.SELECT TOP, LIMIT & OFFSET Pagination
16.INSERT INTO: Single & Multi-Row Insertions
17.UPDATE: Modifying Existing Records & Safe WHERE Rules
18.DELETE: Removing Rows vs TRUNCATE TABLE
19.SELECT INTO & Table Backups (CREATE TABLE AS SELECT)
20.INSERT INTO SELECT: Bulk Data Migration
21.Aggregate Functions: Statistical Summaries
22.MIN() & MAX(): Finding Extremes Across Types
23.COUNT: COUNT(*), COUNT(column) & COUNT(DISTINCT)
24.SUM() & AVG(): Numerical Aggregation & Averages
25.GROUP BY: Aggregation Buckets & Categorical Metrics
26.HAVING: Filtering Aggregated Groups vs WHERE
27.Joins Architecture: Relational Modeling & Venn Diagrams
28.INNER JOIN: Matching Intersections Across Tables
29.LEFT JOIN: Preserving Unmatched Left Rows & Finding Orphans
30.RIGHT JOIN: Preserving Unmatched Right Rows
31.FULL JOIN: Full Outer Join & Complete Reconciliation
32.SELF JOIN: Hierarchies, Trees & Parent-Child Relationships
33.UNION: Combining Result Sets with Automatic Deduplication
34.UNION ALL vs UNION: Performance & Duplicates
35.EXISTS & NOT EXISTS: Correlated Subqueries
36.ANY & ALL: Quantified Comparison Subqueries
37.CASE: Conditional Expressions & Data Transposition
38.Null Functions: COALESCE, IFNULL, ISNULL & NULLIF
39.Stored Procedures, Functions & Query Parameters
40.CREATE & DROP DATABASE: Environment Lifecycle
41.CREATE TABLE: Defining Schemas & Types
42.DROP & TRUNCATE TABLE: Structure vs Data Purging
43.ALTER TABLE: Modifying Columns & Schema Evolution
44.AUTO INCREMENT & Sequences: Identity Generation
45.Date & Time Formats: Timestamp Manipulation
46.Views: Virtual Tables & Security Layers
47.Constraints Overview: Relational Integrity
48.NOT NULL & UNIQUE: Data Invariants
49.PRIMARY KEY: Entity Uniqueness & Clustering
50.FOREIGN KEY: Referential Integrity & Cascades
51.CHECK & DEFAULT: Business Rules at DB Layer
52.CREATE INDEX: B-Trees & Query Optimization
53.Injection Defense: Threat Models & Prevention
54.Parameters & Prepared Statements: Safe Execution
55.Database Engines & Hosting Architecture
56.Dialect References & Data Type Standards
57.Production Best Practices & Query Tuning Checklist
58.Interactive Exercises: Multi-Table Analytics Challenges
59.Comprehensive Assessment & Knowledge Check
60.Capstone Project: Enterprise Analytics Engine
61.Mastery Certification & Graduate Verification
Course Certificate0%

Complete all lessons to earn

LearnSQL EXISTS & NOT EXISTS: Correlated Subqueries
35 / 61 0%
Lesson 35 of 61
5 mins read

SQL EXISTS & NOT EXISTS: Correlated Subqueries

PreviousNext Lesson
In Plain English

The `EXISTS` operator tests whether a subquery returns ANY rows, evaluating to `TRUE` the instant a single matching row is encountered (short-circuit execution). `NOT EXISTS` verifies that no matching rows exist. Unlike `NOT IN`, `NOT EXISTS` handles NULL values safely and predictably.

The Mental Model

"`EXISTS` is like peering through a peephole into a room: the moment you see at least one person inside, you immediately say "Yes" without needing to count every single person in the room."

Deep Dive: How It Works

Correlated Subquery: The inner query references a column from the outer query (`WHERE o.customer_id = c.id`), running once per candidate outer row.

Short-Circuit Optimization: The database engine stops scanning the inner table the moment the FIRST matching row is found.

`SELECT 1` Convention: Writing `EXISTS (SELECT 1 FROM ...)` is standard because column projection in the subquery is ignored by the optimizer.

Syntax Blueprint

SELECT c.name
FROM customers AS c
WHERE EXISTS (
  SELECT 1
  FROM orders AS o
  WHERE o.customer_id = c.id AND o.amount > 500
);

EXISTS evaluates whether the correlated subquery finds at least one matching row.

PointCore Rules to Remember

Point star
Short-Circuit Speed: Terminates inner scan on first match, making it fast on large tables.
Point star
Safe with NULLs: `NOT EXISTS` never suffers from the 3VL UNKNOWN null trap that breaks `NOT IN`.
Point star
Correlated Execution: Correlates outer candidate rows with inner relational constraints.

Common Beginner Traps & How to Fix Them

Mistake:Using `NOT IN` instead of `NOT EXISTS` when the subquery may contain NULL values.

Why it happens: A single NULL in a `NOT IN` subquery ruins the entire condition and returns 0 rows.

How to fix: Standardize on `NOT EXISTS` for multi-table exclusion checks.

Pro Tip: Use `SELECT 1` or `SELECT *` inside EXISTS; modern query planners completely disregard projected columns inside EXISTS blocks.

Live Interactive Example

Hit Run Code to see it live
Finding Active Customers with EXISTS and Inactive with NOT EXISTS
Python 3.12
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Output Console
Click "Run Code" to view the rendered output.
How it works: EXISTS identified Alice with orders > $100, and NOT EXISTS isolated Charlie with zero orders.

Your Turn: Micro Challenge

No pressure! Edit the starter code below and test your solution with instant feedback.

Micro Exercise

Filter with EXISTS Subquery

  • PointSelect `u.name` from `users u WHERE EXISTS (SELECT 1 FROM logs l WHERE l.user_id = u.id)`.
1
2
3
4
5
6
7
Sandbox Output
Click "Run & Check" to test your solution.

Finished reading and practicing?

Mark this lesson as completed to update your course progress.

PreviousNext Lesson
Overview100 SheetLearnCertificates