typestar

EXISTS, IN y la trampa del NULL en SQL

Las dos se leen igual hasta que la subconsulta devuelve un NULL, y entonces discrepan.

SELECT name
FROM customers AS c
WHERE EXISTS (
        SELECT 1
        FROM orders AS o
        WHERE o.customer_id = c.id
            AND o.status = 'paid'
    );

SELECT name
FROM customers AS c
WHERE NOT EXISTS (
        SELECT 1
        FROM payments AS p
        WHERE p.order_id = c.id
    );

Cómo funciona

  1. EXISTS se detiene en la primera fila que coincide; nunca compara valores.
  2. NOT IN sobre una subconsulta con un NULL no devuelve fila alguna.
  3. NOT EXISTS es la forma que sigue portándose bien cuando los datos se ensucian.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
16
Caracteres a escribir
231
Tokens
57
Ritmo de tres estrellas
95 tpm

Al ritmo de tres estrellas de 95 tokens por minuto, este intento toma unos 36 segundos.

Escribe este fragmento

Paso 2 de 3 en Hacerla más rápida; paso 9 de 17 en Planes y rendimiento.

← Anterior Siguiente →