Resumen

Cuando trabajas con bases de datos en producción, borrar un registro no es tan simple como eliminar una fila en una hoja de cálculo. Un DELETE mal aplicado puede destruir el historial completo de pedidos, relaciones y datos críticos de negocio. Por eso, los equipos profesionales de datos prefieren una estrategia diferente: el borrado lógico.

¿Por qué el DELETE físico es irreversible en producción?

En Excel estamos acostumbrados a borrar filas sin consecuencias, pero en una base de datos relacional la situación cambia por completo. Si borras físicamente un cliente activo, destruyes su historial de pedidos y toda la información relacionada [01:00]. El registro desaparece de la tabla y, con él, cualquier referencia que otras tablas tuvieran hacia ese dato.

El comando DELETE en SQL elimina registros de forma permanente. Su sintaxis básica es sencilla, pero requiere una regla fundamental que nunca debes olvidar: DELETE siempre con WHERE [02:22]. Sin esa cláusula, podrías vaciar una tabla completa por accidente.

sql DELETE FROM clientes WHERE cliente_id = 99;

En el ejemplo anterior, el cliente con ID 99 desaparece por completo de la tabla. Al ejecutar un SELECT * FROM clientes antes y después del DELETE, se confirma que la fila ya no existe [03:20].

¿Cómo funciona DELETE con RETURNING?

Una variante útil del DELETE es combinarlo con la cláusula RETURNING, que te muestra exactamente qué filas fueron eliminadas [04:05]. Esto es especialmente práctico para auditoría o para confirmar que borraste el registro correcto.

sql DELETE FROM detalle_pedidos WHERE pedido_id = 100 RETURNING *;

Este comando elimina de la tabla detalle_pedidos todas las filas donde el pedido_id sea 100 y devuelve como resultado las filas que acaba de borrar [04:50]. Así puedes verificar la operación sin necesidad de hacer consultas adicionales.

¿Qué es el borrado lógico y por qué se prefiere en datos de negocio?

El borrado lógico consiste en agregar una columna llamada activo a la tabla, con valores true o false [05:40]. En lugar de eliminar un registro, simplemente cambias su estado a inactivo mediante un UPDATE. La fila sigue existiendo en la base de datos, pero se trata como si no estuviera.

sql UPDATE clientes SET activo = false WHERE cliente_id = 5;

Esta técnica tiene ventajas claras:

  • Preserva el historial completo del cliente y sus relaciones.
  • Mantiene la consistencia e integridad de la base de datos.
  • Permite reactivar el registro en cualquier momento.

¿Cómo consultar clientes activos e inactivos por separado?

Una vez implementado el borrado lógico, tus consultas deben filtrar por el campo activo. Para obtener solo los clientes vigentes [07:00]:

sql SELECT * FROM clientes WHERE activo = true;

Y para ver los clientes dados de baja:

sql SELECT * FROM clientes WHERE activo = false;

La tabla permanece intacta. Lo único que cambia es la condición del registro, y con ello puedes mantener todo el historial sin perder datos [07:25].

¿Cómo reactivar un cliente dado de baja?

Si un cliente vuelve a hacer negocio contigo, reactivarlo es tan simple como hacer otro UPDATE cambiando el campo activo a true [07:50]:

sql UPDATE clientes SET activo = true WHERE cliente_id = 5 RETURNING *;

El uso de RETURNING aquí confirma que el cambio se aplicó correctamente, mostrando el registro actualizado con su estado activo restaurado.

La diferencia entre ambos enfoques es determinante: el DELETE físico elimina datos de forma permanente, mientras que el borrado lógico simplemente cambia una condición de true a false. Con esta segunda estrategia, nunca pierdes información histórica y conservas la integridad referencial con todas las tablas relacionadas.

Ahora que conoces ambos patrones, practica desactivando tres clientes con UPDATE, usa RETURNING para confirmar los cambios y filtra con WHERE activo = true para verificar el resultado. ¿En qué otros escenarios aplicarías borrado lógico en lugar de un DELETE? Comparte tu respuesta en los comentarios.