Por Geymer Morales Cruz

Compartiendo Información...

Seleccionar registros de una tabla que no están en otra SQL Server

[SQL]Select tabla registros no están en otra tabla

Hola, otra vez por acá compartiendo un par de consultas que pueden ser de mucha ayuda, son sencillas pero para personas que están comenzando en este mundo serian de mucha ayuda, resulta que en algún momento en uno de mis programas necesitaba obtener registros de una tabla pero con la condición que esos registros no estuvieran en otra tabla, existen muchas formas de hacerlo en este post les mostrare tres opciones.

Seleccionar registros de una tabla que no están en otra, Opción 1:
Select * from tabla1 where not exists
(select 1 from tabla2 where tabla2.id = tabla1.id)

Muy importante, si el campo o los campos id de tu tabla esta indexados esta consulta va a ser súper rápida y estará muy optimizada en ese sentido por lo que no te dará problemas.

Seleccionar registros de una tabla que no están en otra, Opción 2:
Select * from tabla1 where tabla1.id 
not in (select tabla2.id from tabla2)

En esta segunda opción veremos el NOT IN, esta segunda opción a mi parecer es ineficiente porque a cada registro se ejecuta el  segundo SELECT, Si tu tabla2 es grande notaras de inmediato el tiempo de respuesta de tu server en devolver esta instrucción

Seleccionar registros de una tabla que no están en otra, Opción 3:
Select * from t1 left join t2 on t1.id=t2.id where t2.id is null 

También podemos hacer un LEFT JOIN de manera que seleccionaríamos los registros que no ha podido hacer el JOIN.

Son tres opciones interesantes, sé que puede haber más y mejores sentencias con esta finalidad, en lo personal me gustan las opciones 3 y 1, al final prefiero más la 1.
Hasta pronto!

2 comentarios:

Anónimo dijo...

Muchas gracias... la primera opcion me salvo

Geymer Morales Cruz dijo...

Muchas gracias por tu comentario, me alegra que te ayudara, saludos :)