SQL databases implement anti-joins—finding rows with no match—through NOT EXISTS. Although anti-join is not a distinct relational algebra operator, it can be derived from set difference and semi-join. A naive implementation that scans both sets to find the complement would not scale, so databases use short-circuit evaluation: the inner scan stops as soon as a match is found or ruled out, because only existence matters. That is why a subquery without any JOIN keyword can still appear as an Anti Join in the execution plan. Here is an example in PostgreSQL, where we find users who haven't made any paid transactions: postgres =# EXPLAIN ANALYZE SELECT u . * FROM users u WHERE NOT EXISTS ( SELECT 1 FROM transactions t WHERE t . user_id = u . id AND t . type = 'paid' ); QUERY PLAN --------------------------------------------------------------------------------------------------------------------------- Nested Loop Anti Join ( actual time = 17 . 087 .. 17 . 087 rows = 0 .…