Concepto
Algunas preguntas son de sí o no: "¿este estudiante tiene alguna inscripción en observación?", "¿este curso tiene inscritos?". EXISTS responde eso para cada fila: es verdadero si la subconsulta devuelve al menos una fila.
SELECT columnas
FROM tabla_a AS a
WHERE EXISTS (
SELECT 1 FROM tabla_b AS b WHERE b.a_id = a.id
);Una subconsulta que mira la fila de afuera. Dentro del EXISTS, la condición i.estudiante_id = e.id usa la fila de estudiantes que se está revisando. Por eso la subconsulta se evalúa una vez por cada estudiante. A esto se le llama subconsulta correlacionada.
SELECT e.nombre
FROM estudiantes AS e
WHERE EXISTS (
SELECT 1 FROM inscripciones AS i
WHERE i.estudiante_id = e.id AND i.estado = 'observacion'
);No importa qué devuelve. EXISTS solo pregunta si hay alguna fila. Por eso se escribe SELECT 1: el valor da igual.
NOT EXISTS: los que no tienen. Es la forma más clara de encontrar lo que falta: estudiantes sin inscripciones, cursos sin inscritos, clientes sin compras.
SELECT e.nombre
FROM estudiantes AS e
WHERE NOT EXISTS (
SELECT 1 FROM inscripciones AS i WHERE i.estudiante_id = e.id
);Frente a un JOIN. Un JOIN repite al estudiante una vez por cada inscripción que cumple; EXISTS lo muestra una sola vez, porque solo pregunta si existe.
> tarea SQL
Para destacar los cursos sin alertas, lista los cursos que no tienen ninguna inscripción en estado 'riesgo'. Devuelve una sola columna: titulo.
Primero intenta: las pistas aparecen después de 2 intentos con un resultado incorrecto (los errores de código no cuentan). Llevas 0.