Análisis SQL

IN o EXISTS: ¿qué escritura utilizar?

La elección se vuelve sencilla cuando se distingue la pertenencia a una lista y la existencia de una relación.

Equipo de SQL.tn8 min
Un valor se compara con una colección y luego se verifica mediante una señal de existencia.

¿Estás probando una lista o una relación?

statut IN ('Pagado', 'Pendiente') describe una lista cerrada. EXISTS es adecuado cuando se debe conservar una fila exterior si una fila vinculada cumple una condición.

EXISTS evita duplicar un cliente que tiene múltiples pedidos coincidentes, porque solo cuenta la existencia de la primera coincidencia.

Los nombres, cantidades y datos utilizados en este artículo son ficticios y creados con fines de aprendizaje.

La consulta explicada

Empieza por definir qué debe representar una fila del resultado. Esta decisión determina las columnas, agrupaciones y controles necesarios.

El siguiente ejemplo aísla el mecanismo principal. Ejecútelo, observe el resultado y luego cambie una cláusula a la vez para comprender su efecto.

Clientes con un pedido pagado
SELECT c.id_client, c.nom
FROM clients c
WHERE EXISTS (
  SELECT 1
  FROM commandes co
  WHERE co.id_client = c.id_client
    AND co.statut = 'Pagado'
);

Lea el resultado como un analista.

La subconsulta está correlacionada por id_client. SELECT 1 indica que las columnas internas no se utilizan en el resultado.

Tenga cuidado con NOT IN si la lista puede contener NULL; NOT EXISTS suele expresar más claramente la ausencia de una relación.

  • Identificar la clave de correlación.
  • Prueba un caso con múltiples coincidencias.
  • Prueba un caso inigualable.
  • Comprueba la posible presencia de NULL.

Errores que distorsionan el análisis

Una consulta puede ser válida sin responder correctamente a la pregunta. Los errores más costosos suelen ser silenciosos: perímetro incorrecto, línea multiplicada o valor faltante interpretado como cero.

Antes de compartir el resultado, compárelo con una pequeña muestra calculada manualmente y mantén la definición del alcance con la consulta.

  • Mostrando columnas internas cuando solo importa la existencia.
  • Olvídese de la correlación y haga que EXISTS sea verdadero para todas las filas.
  • Utiliza NOT IN con NULL inesperado.
  • Únase y luego añade DISTINCT para compensar las repeticiones.

Ponte en practica

Ejerza EXISTS en pedidos grandes, luego cambie el umbral y observe la población retenida.

El simulador SQL de SQL.tn solo ejecuta consultas de lectura sobre datos ficticios en su navegador. Puede probar varias escrituras y comparar sus resultados sin instalar ningún software.

Pon esta guía en práctica.

Abre el ejercicio relacionado, ejecuta tu consulta y compara el resultado esperado.

Empezar el ejercicio
IN o EXISTS a SQL: listas, relaciones y valores NULL — SQL.tn