Registros no coincidentes

 

¿Quién no se ha parado alguna vez a pensar como hacer una consulta que extraiga los registros que NO coinciden entre dos tablas?, pues la verdad es que Yo mismo he pasado por esa situación y para un programador que esté comenzando con SQL le trae un pequeño dilema moral.

A decir verdad la respuesta es bien sencilla, imaginemos el siguiente escenario.

Tenemos una tabla llamada usuarios con los siguientes campos:

IdUsuario (Int)
Nombre (Char)
Apellido (Char)

Ahora tenemos otra con las fotos de estos usuarios:

IdFoto (Int)
IdUsuario (Int)
Foto (Blob)

Si quisiéramos extraer todos los usuarios que no tengan fotografía la consulta sería la siguiente:

Select u.Nombre, f.idfoto From usuarios u Left Join fotos f ON u.idusuario=f.idusuario Where f.idusuario Is Null;

¿Qué hemos hecho?

Pues muy sencillo, hacemos una consulta relacional con una cláusula "Lejt Join", recordemos que esta cláusula no obliga a que los registros coincidan, por lo tanto el resultado devuelto de esta consulta tendría valores nulos (los correspondientes a f.idfoto), lo único que debemos hacer es introducir una cláusula Where indicando que tan solo se desean los valores nulos, los que no están en la tabla fotos.

Como veis no es tan complicado hacer la consulta, tan solo un poco liosa al principio.