1. Faro

Nivel 6 · ¿Vaciarla, limpiarla o eliminarla?

La solicitud

De Tyler Morgan, Ingeniero de Datos Junior

“Nuestra tabla supplier_import recibe un archivo nuevo cada mañana. Antes de cada carga la necesito vacía, pero la tabla, sus columnas y tipos tienen que quedar exactamente como están. ¿Qué sentencia debería ejecutar el trabajo?”

Tu objetivo

Elige la sentencia que elimina todas las filas de supplier_import antes de la siguiente carga conservando la tabla y las definiciones de sus columnas.

supplier_import se recarga cada mañana. ¿Qué sentencia la vacía antes de la carga y conserva la tabla con sus columnas y tipos?

Elige una respuesta y luego compruébala.

La lección

Este quiz comprueba la diferencia entre las tres formas de eliminar datos, y las decisiones de tipos de datos que tomas cuando creas una tabla en primer lugar.

Tres niveles de eliminación

sentencia qué se va qué se queda
DELETE FROM t WHERE ... las filas que cumplen la condición la tabla y todas las demás filas
DELETE FROM t (sin WHERE) todas las filas, una a una la tabla vacía
TRUNCATE TABLE t todas las filas, en una sola operación la tabla vacía, con columnas y tipos
DROP TABLE t la propia tabla nada

DELETE es la herramienta precisa: admite un WHERE, y se puede revertir dentro de una transacción en todas las bases de datos importantes. TRUNCATE es la herramienta masiva para “vacía esta tabla ya”, mucho más rápida en tablas grandes porque no procesa las filas individualmente. DROP TABLE es para tablas que ya no necesitas.

Una tabla de importación diaria es el caso de manual de TRUNCATE. El trabajo ejecuta: truncar, insertar el archivo de hoy, contar las filas, comparar con el número de filas del archivo. Si la carga falla a la mitad, la tabla queda vacía o parcialmente cargada, lo que atrapa la comprobación del conteo de filas.

Elige tipos que encajen con los datos

La tabla que vacías cada mañana se definió una vez con CREATE TABLE, y sus tipos deciden lo que acepta:

  • Dinero en DECIMAL, no FLOAT. DECIMAL(10, 2) guarda centavos exactos. DOUBLE y FLOAT guardan aproximaciones binarias: en DuckDB, 0.1::DOUBLE + 0.2::DOUBLE es 0.30000000000000004, así que las comprobaciones de igualdad y las sumas de muchos precios se desvían. El mismo 0.1 + 0.2 con decimales es exactamente 0.3.
  • Fechas en DATE o TIMESTAMP, no en texto. Una columna de texto ordena ‘11/3/2025’ antes de ‘2/1/2025’ y no puede hacer aritmética de fechas.
  • Indicadores en BOOLEAN. is_active en la tabla de productos de la tienda es un BOOLEAN: verdadero o falso, sin espacio para ‘Yes’, ‘Y’ e ‘y’.
  • Ids como INTEGER con una clave primaria, para que los duplicados se rechacen al insertar.

Errores comunes

  • Eliminar y recrear una tabla cada día en lugar de truncarla, de modo que su definición vive en dos lugares y se desincroniza.
  • Suponer que TRUNCATE se puede deshacer en todas partes. En Postgres, DuckDB y SQL Server se revierte dentro de una transacción; en MySQL y Oracle se confirma de inmediato.
  • Guardar precios como FLOAT porque “es un número”.

En SQL Server

T-SQL requiere la palabra TABLE: TRUNCATE TABLE dbo.SupplierImport;. Su tipo adecuado para dinero es DECIMAL(10,2) (también existe MONEY, que muchos equipos evitan por el redondeo en la división), los indicadores son BIT (0 o 1, sin un tipo BOOLEAN real), el texto suele ser NVARCHAR(n) y las fechas con hora son DATETIME2. TRUNCATE falla en una tabla referenciada por una clave foránea; DELETE no.

Elige qué puede ejecutarse en este sitio. Puedes cambiarlo cuando quieras desde "Configurar cookies", al pie de cada página.