A veces nos interesa responder preguntas como: ¿cuáles son los alumnos que no rindieron el examen de Matemática? ¿quiénes son los clientes a los cuales aún no se les cobró? ¿cuáles son los productos que no tenemos en la sucursal de Roma? ¿quiénes son las personas que aún no votaron?

Todas estas preguntas como puedes ver son negativas, en todas ellas queremos saber cuales son las filas que no cumplen con una condición.

La forma de responderlas es a través de un JOIN y de un WHERE en el cual la condición sea IS NULL, como en este ejemplo:

Ejemplo. ¿Cuáles son los clientes a quiénes aún no se les cobró?

SELECT
   C.CLI_CODIGO,
   C.CLI_NOMBRE
FROM
   CLIENTES C
LEFT JOIN
   COBRANZAS B
      ON C.CLI_CODIGO = B.COB_CODCLI
WHERE
   B.COB_CODCLI IS NULL

Al ejecutarlo obtendremos los códigos y los nombres de todos los clientes a quienes aún no se les ha cobrado. ¿Por qué? porque si no se les cobró entonces el código de ellos no estará en la tabla de COBRANZAS y si el código no está en esa tabla entonces la condición B.COB_CODCLI IS NULL será verdadera, ya que si buscamos en una tabla un dato que no se encuentra en esa tabla lo que obtenemos es NULL.

En lenguaje llano lo que estamos diciendo es: “muéstrame los códigos y los nombres de todos los clientes cuyos códigos no se encuentren en la tabla de COBRANZAS”. Y claro, si los códigos no están en esa tabla es porque no se les cobró.

Lo importante a recordar es que cuando deseamos responder preguntas negativas tales como las planteadas al principio de este artículo debemos en el WHERE utilizar IS NULL.