Mysql – Eliminar registros de una tabla que no existen en otra

Dos tablas relacionadas en MySql y queremos eliminar los registros de una tabla que no existen en la otra. Utilizaremos la orden Delete con una subconsulta.

Muchas veces, sobretodo en importaciones de bases de datos, nos puede interesar crear una nueva tabla a partir de dos tablas existentes, o eliminar datos que no nos interesan. Pongamos un ejemplo:

TablaUsuarios
id (identificador)
nombre (nombre de los datos)

TablaNewsletter
id (identificador usuarios)
email

Pues ahora resulta, que se nos jira la cabeza, y nos enfadamos con todos los clientes que no se han apuntado a la newsletter. Los eliminamos.

Lo haremos con la orden DELETE. Para saber qué eliminamos, utilizamos el NOT IN que comparará la Id de TablaUsuarios con el listado de ID que le pasemos en el paréntesis. Pero dentro del paréntesis, pondremos una subconsulta. En el ejemplo haremos una consulta de las ID de la TablaNewsletter.

DELETE FROM TablaUsuarios WHERE id NOT IN (SELECT id FROM TablaNewsletter);

Traduciendo la sentencia anterior diríamos algo así:

ELIMINA DE LA TablaUsuarios DONDE su ID NO ESTÉ EN (SELECCIONAR las id DE TablaNewsletter).

Y de esta manera eliminamos todos los registros de la TablaUsuarios cuya ID no esté en la TablaNewsletter. Dicho de otro modo, eliminamos todos los usuarios que no estan en la newsletter. Un poco estricto, pro es lo que hay.

Espero que con el uso de la sentencia DELETE de MySQL con subconsults, podáis saber cómo eliminar registros de una tabla que no existen en otra.