MySQL 5.0 Reference Manual – EXISTS y NOT EXISTS

Si una subconsulta retorna algún registro, entonces EXISTS subquery es TRUE, y NOT EXISTS subquery es FALSE. Por ejemplo:

 

Tradicionalmente, una subconsulta EXISTS comienza con SELECT *, pero puede comenzar con SELECT 5 o SELECT col1 o nada. MySQL ignora la lista SELECT en tales subconsultas, así que no hace distinción.

Para el ejemplo precedente, si t2 contiene algún registro, incluso registros sólo con valores NULL entonces la condición EXISTS es TRUE. Este es un ejemplo poco probable, ya que prácticamente siempre una subconsulta [NOT] EXISTS contiene correlaciones. Aquí hay algunos ejemplos más realistas:

  • ¿Qué clase de tienda hay en una o más ciudades?

     
  • ¿Qué clase de tienda no hay en ninguna ciudad?

     
  • ¿Qué clase de tienda hay en todas las ciudades?

     

El último ejemplo es un doblemente anidado NOT EXISTS . Esto es, tiene una cláusula NOT EXISTS dentro de otra NOT EXISTS. Formalmente, responde a la pregunta “¿existe una ciudad con una tienda que no esté en Stores?” Sin embargo, es más fácil decir que un NOT EXISTS responde a la pregunta “¿es x TRUE para todo y?”


Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com.

Fuente