tabla1 (id, nombre) tabla2 (id, nombre)
Consulta:
SELECT name
FROM table2
-- that are not in table1 already
SELECT t1.name
FROM table1 t1
LEFT JOIN table2 t2 ON t2.name = t1.name
WHERE t2.name IS NULL
Q: ¿Qué está pasando aquí?
A: Conceptualmente, seleccionamos todas las filas de la "tabla1" y para cada fila intentamos encontrar una fila en la "tabla2" con el mismo valor para la columna "nombre". Si no hay tal fila, dejamos la parte de la "tabla2" de nuestro resultado vacía para esa fila. A continuación, restringimos nuestra selección eligiendo sólo aquellas filas del resultado en las que no existe la fila coincidente. Por último, ignoramos todos los campos de nuestro resultado excepto la columna nombre
(la que estamos seguros de que existe, de la tabla1
).
Aunque puede que no sea el método más eficaz posible en todos los casos, debería funcionar básicamente en cualquier motor de base de datos que intente implementar ANSI 92 SQL.
Puede hacer
SELECT name
FROM table2
WHERE name NOT IN
(SELECT name
FROM table1)
o
SELECT name
FROM table2
WHERE NOT EXISTS
(SELECT *
FROM table1
WHERE table1.name = table2.name)
Ver esta pregunta para 3 técnicas para lograr esto