Diferencia entre ALTER TABLE ADD COLUMN y ALTER TABLE MODIFY COLUMN en SQL

Imagen con código SQL que compara ALTER TABLE ... ADD COLUMN dni VARCHAR(20); frente a ALTER TABLE ... MODIFY COLUMN email VARCHAR(255); para ilustrar la diferencia entre agregar y modificar columnas en una tabla.

En SQL no basta con crear tablas: con el tiempo, los requerimientos cambian y es necesario adaptar la estructura. Quizás tengas que agregar una nueva columna para guardar un dato adicional o modificar una existente porque el tipo de dato ya no es suficiente.
En estos casos entran en juego dos instrucciones clave:

  • ALTER TABLE ... ADD COLUMN
  • ALTER TABLE ... MODIFY COLUMN

A primera vista parecen similares, pero cumplen propósitos diferentes y, además, la sintaxis varía según el motor de base de datos. En este artículo vas a aprender, desde cero, la diferencia entre ambas, con ejemplos detallados, notas de compatibilidad y recomendaciones de uso seguro en producción.

1) Recordatorio: ¿qué es ALTER TABLE?

El comando ALTER TABLE permite modificar la definición de una tabla existente sin tener que eliminarla ni volver a crearla. Con él se pueden realizar muchas operaciones, como:

  • Agregar o eliminar columnas.
  • Cambiar tipos de datos, longitudes o restricciones (NOT NULL, DEFAULT).
  • Renombrar columnas o tablas.
  • Añadir o quitar claves primarias, foráneas, índices o reglas CHECK.

En resumen: ALTER TABLE es el «cuchillo suizo» de la evolución de esquemas en SQL.

2) ALTER TABLE ADD COLUMN: para agregar campos nuevos

2.1 Sintaxis general

ALTER TABLE nombre_tabla
ADD COLUMN nombre_columna tipo_de_dato [restricciones];

2.2 Ejemplo práctico

Supongamos que tenemos una tabla de clientes:

CREATE TABLE clientes (
  id         INT PRIMARY KEY,
  nombre     VARCHAR(100) NOT NULL,
  email      VARCHAR(255),
  fecha_alta DATE
);

Ahora queremos agregar el número de teléfono. Usamos:

ALTER TABLE clientes
ADD COLUMN telefono VARCHAR(30);

Resultado:
La tabla mantiene sus columnas originales y ahora incluye telefono.

idnombreemailfecha_altatelefono
1Anaana@mail.com2024-01-01NULL
2Brunobruno@mail.com2024-01-02NULL

2.3 Agregar múltiples columnas a la vez

ALTER TABLE clientes
ADD COLUMN pais VARCHAR(50),
ADD COLUMN ciudad VARCHAR(80);

2.4 Puntos importantes

  • Si la tabla ya tiene datos, las filas existentes reciben NULL en las nuevas columnas (a menos que se especifique un DEFAULT).
  • La sintaxis ADD COLUMN es bastante estándar, pero algunos motores (como SQL Server) permiten omitir la palabra COLUMN.
  • En bases de datos muy grandes, agregar una columna NOT NULL con DEFAULT puede bloquear o reescribir la tabla.

3) ALTER TABLE MODIFY COLUMN: para cambiar columnas existentes

3.1 ¿Qué hace?

Mientras que ADD COLUMN crea un campo nuevo, MODIFY COLUMN (o su equivalente según el motor) ajusta las características de una columna que ya existe.
Con él podés:

  • Cambiar el tipo de dato.
  • Alterar la longitud máxima de un VARCHAR.
  • Añadir o quitar restricciones como NOT NULL.
  • Redefinir el valor por defecto (DEFAULT).

3.2 Sintaxis típica (MySQL/MariaDB)

ALTER TABLE nombre_tabla
MODIFY COLUMN nombre_columna nuevo_tipo [restricciones];

3.3 Ejemplo práctico

Si en la tabla clientes queremos que el campo telefono admita más caracteres:

ALTER TABLE clientes
MODIFY COLUMN telefono VARCHAR(50);

Ahora telefono pasa de VARCHAR(30) a VARCHAR(50).

3.4 Otros motores

Cada motor de base de datos maneja su propia sintaxis:

  • PostgreSQL usa ALTER COLUMN ... TYPE: ALTER TABLE clientes ALTER COLUMN telefono TYPE VARCHAR(50);
  • SQL Server también usa ALTER COLUMN: ALTER TABLE clientes ALTER COLUMN telefono VARCHAR(50);
  • Oracle utiliza MODIFY: ALTER TABLE clientes MODIFY (telefono VARCHAR2(50));

4) Comparación directa: ADD COLUMN vs MODIFY COLUMN

CaracterísticaADD COLUMNMODIFY COLUMN
ObjetivoCrear una nueva columna.Cambiar una columna existente.
EjemploADD COLUMN telefono VARCHAR(30);MODIFY COLUMN telefono VARCHAR(50);
Datos existentesNo se tocan, solo reciben NULL o el DEFAULT.Deben ser compatibles con el nuevo tipo/restricción.
Errores comunesIntentar agregar una columna ya existente.Cambiar tipo sin conversión válida; forzar NOT NULL con valores nulos.
CompatibilidadEstándar en casi todos los motores.Varía mucho: MODIFY, ALTER COLUMN, etc.

5) Casos en los que usar ADD COLUMN

  • Cuando tenés que guardar un nuevo dato que antes no existía.
  • Ejemplo: tu aplicación ahora requiere almacenar el número de documento de los clientes:
ALTER TABLE clientes
ADD COLUMN dni VARCHAR(20) NOT NULL;
  • Otro ejemplo: registrar la fecha de última actualización:
ALTER TABLE clientes
ADD COLUMN ultima_actualizacion TIMESTAMP DEFAULT CURRENT_TIMESTAMP;

6) Casos en los que usar MODIFY COLUMN

  • Cuando querés ajustar un campo existente para que soporte datos diferentes.
  • Ejemplo: un VARCHAR(100) que necesita crecer a VARCHAR(200).
  • O un campo opcional (NULL) que ahora debe ser obligatorio:
ALTER TABLE clientes
MODIFY COLUMN email VARCHAR(255) NOT NULL;
  • Otro uso común: actualizar un DEFAULT:
ALTER TABLE clientes
MODIFY COLUMN pais VARCHAR(50) DEFAULT 'Argentina';

7) Riesgos y buenas prácticas

7.1 Con ADD COLUMN

  • En tablas grandes, evita agregar columnas con NOT NULL y DEFAULT en una sola operación.
  • Estrategia segura: agregar la columna como nullable, rellenar los valores (UPDATE en batches) y después aplicar NOT NULL.

7.2 Con MODIFY COLUMN

  • Cuidado al reducir tamaños (VARCHAR(200)VARCHAR(50)): se pueden truncar datos.
  • Antes de aplicar NOT NULL, asegurate de que no haya valores nulos.
  • Al cambiar tipos (ej. TEXT a INT), verificá la conversión.

7.3 Compatibilidad entre motores

  • ADD COLUMN suele ser igual en casi todos.
  • MODIFY COLUMN cambia de nombre según el motor (ALTER COLUMN en PostgreSQL/SQL Server, MODIFY en Oracle).

8) Ejemplo completo: evolución de una tabla

Escenario: tabla de pedidos.

CREATE TABLE pedidos (
  id         INT PRIMARY KEY,
  cliente_id INT NOT NULL,
  total      NUMERIC(12,2) NOT NULL,
  fecha      DATE NOT NULL
);

Paso 1: Agregar columna de estado (ADD COLUMN)

ALTER TABLE pedidos
ADD COLUMN estado VARCHAR(20) DEFAULT 'pendiente';

Ahora cada pedido tiene un estado.

idcliente_idtotalfechaestado
110250.002024-01-05pendiente

Paso 2: Ajustar tipo de columna total (MODIFY COLUMN)

Necesitamos que total permita más precisión:

  • En PostgreSQL: ALTER TABLE pedidos ALTER COLUMN total TYPE NUMERIC(14,4);
  • En MySQL/MariaDB: ALTER TABLE pedidos MODIFY COLUMN total DECIMAL(14,4);
  • En Oracle: ALTER TABLE pedidos MODIFY (total NUMBER(14,4));

Resultado: ahora se admiten montos más grandes y con más decimales.

9) Ejemplo de error típico

Caso: intentar usar ADD COLUMN para algo que corresponde a MODIFY COLUMN.

ALTER TABLE clientes
ADD COLUMN email VARCHAR(300);   -- ❌ Error: email ya existe

Solución:

ALTER TABLE clientes
MODIFY COLUMN email VARCHAR(300); -- ✅ correcto

10) Checklist antes de aplicar cambios

  • ¿Realmente necesitás una nueva columna o solo cambiar una existente?
  • ¿Probaste en un entorno de desarrollo?
  • ¿Los datos actuales son compatibles con el nuevo tipo o restricción?
  • ¿Tenés respaldo/rollback en caso de fallo?
  • ¿Verificaste dependencias (índices, claves foráneas, vistas)?

11) Cierre

La diferencia entre ADD COLUMN y MODIFY COLUMN es clara:

  • ADD COLUMN → crear un campo nuevo.
  • MODIFY COLUMN → ajustar un campo existente.

Usar uno u otro depende de tu objetivo. Ambos son parte del comando ALTER TABLE, pero mientras ADD COLUMN es bastante estándar, MODIFY COLUMN cambia mucho entre motores y requiere cuidado extra.

Si aplicás estas prácticas, tus cambios de esquema serán más seguros, consistentes y portables.

📚 Artículos relacionados

Scroll al inicio