Los datos del mundo real rara vez están limpios. Los nombres llegan con espacios de más, las fechas se guardan como texto inconsistente, los registros duplicados de clientes se acumulan y campos importantes quedan vacíos. Si alguna vez abriste una tabla y te estremeciste ante el desorden que te miraba de vuelta, ya entiendes por qué limpiar datos desordenados con SQL puro es una habilidad tan valiosa para analistas de datos principiantes y para usuarios de Excel que dan el salto a las bases de datos.

La buena noticia es que no necesitas Python, una herramienta ETL aparte ni una hoja de cálculo llena de fórmulas para resolver la mayoría de los problemas de datos más comunes. SQL, el lenguaje que entienden todas las bases de datos relacionales, trae todo lo necesario: funciones para quitar espacios en blanco, estandarizar mayúsculas y minúsculas, manejar valores faltantes, eliminar duplicados y transformar texto desordenado en algo utilizable.

En esta guía aprenderás técnicas prácticas y aptas para principiantes para limpiar datos desordenados con SQL puro, con ejemplos reales que puedes adaptar a tus propias tablas. Al terminar, te sentirás cómodo resolviendo los problemas de calidad de datos más comunes directamente dentro de tu base de datos, sin exportar una sola fila.

Por Qué Importa Tener Datos Limpios

Los datos desordenados no son solo un problema estético: rompen reportes, distorsionan el análisis y provocan errores en las aplicaciones que dependen de ellos. Algunos ejemplos de lo que pueden causar:

  • Registros duplicados de clientes que inflan tu total de clientes
  • Abreviaturas de estado inconsistentes ("CA" vs. "California") que rompen un reporte con GROUP BY
  • Espacios en blanco de más que hacen que WHERE email = '[email protected]' devuelva cero filas sin avisar
  • Valores NULL que rompen cálculos que asumen que cada fila tiene un valor

Limpiar tus datos con SQL, cerca de donde viven, mantiene tus correcciones consistentes y repetibles, en lugar de editar manualmente una hoja de cálculo cada vez que llegan nuevos datos desordenados.

Problemas Comunes de Datos y Cómo Resolverlos en SQL

1. Eliminar Espacios en Blanco de Más

Los espacios al inicio y al final son uno de los problemas de datos más comunes, y también de los más invisibles. Usa TRIM() para eliminarlos:

SELECT TRIM('  John Smith  ') AS CleanName;
-- Result: 'John Smith'

Para limpiar una columna completa y guardar el resultado:

UPDATE Customers
SET FullName = TRIM(FullName);

2. Estandarizar las Mayúsculas y Minúsculas

Una capitalización inconsistente ("john smith", "JOHN SMITH", "John Smith") puede hacer que la misma persona aparezca como varios valores distintos en un reporte. Usa UPPER() o LOWER() para estandarizar:

SELECT LOWER(Email) AS StandardizedEmail
FROM Customers;

Para dar formato de nombre propio, la mayoría de las bases de datos admiten una función INITCAP() (PostgreSQL) o requieren una expresión personalizada en otras, pero convertir todo a minúsculas suele ser lo más simple y confiable para hacer comparaciones.

3. Manejar Valores NULL y Faltantes

Los valores faltantes pueden romper cálculos y reportes sin que te des cuenta. COALESCE() te permite sustituir un valor predeterminado cuando una columna es NULL:

SELECT
    CustomerName,
    COALESCE(PhoneNumber, 'Not Provided') AS Phone
FROM Customers;

También puedes usar WHERE column IS NULL para encontrar exactamente qué filas tienen datos faltantes y decidir si corregirlas o excluirlas del análisis.

SELECT * FROM Customers WHERE PhoneNumber IS NULL;

4. Encontrar y Eliminar Filas Duplicadas

Los registros duplicados son uno de los problemas más dañinos de los datos desordenados, ya que inflan conteos y totales sin que te des cuenta. Una forma común de encontrar duplicados es con GROUP BY y HAVING:

SELECT Email, COUNT(*) AS Occurrences
FROM Customers
GROUP BY Email
HAVING COUNT(*) > 1;

Para eliminar duplicados conservando una copia de cada uno, muchas bases de datos admiten funciones de ventana como ROW_NUMBER():

WITH Ranked AS (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY Email ORDER BY CustomerID) AS rn
    FROM Customers
)
DELETE FROM Ranked WHERE rn > 1;

Esto conserva la primera fila de cada Email único y elimina el resto.

5. Estandarizar Valores Inconsistentes

Los campos de texto libre suelen contener variaciones inconsistentes del mismo valor, como "CA", "Calif." y "California", que significan el mismo estado. Una instrucción CASE te permite convertir valores desordenados en valores limpios:

SELECT
    State,
    CASE
        WHEN State IN ('CA', 'Calif.', 'California') THEN 'California'
        WHEN State IN ('NY', 'N.Y.', 'New York') THEN 'New York'
        ELSE State
    END AS StandardizedState
FROM Customers;

6. Corregir Formatos de Fecha Inconsistentes

Las fechas guardadas como texto ("01/15/2024", "2024-01-15", "Jan 15 2024") son una fuente frecuente de errores. La mayoría de las bases de datos ofrecen funciones para interpretar fechas y estandarizarlas:

SELECT CAST(OrderDateText AS DATE) AS CleanOrderDate
FROM Orders;

Si CAST falla por formatos inconsistentes, funciones específicas de cada base de datos como TRY_CONVERT (SQL Server) o STR_TO_DATE (MySQL) pueden ayudarte a manejar varios formatos de forma segura.

7. Eliminar Caracteres No Deseados

REPLACE() sirve para quitar caracteres no deseados, como símbolos de moneda o signos de puntuación sueltos, antes de convertir el texto en un número:

SELECT
    CAST(REPLACE(REPLACE(PriceText, '$', ''), ',', '') AS DECIMAL(10,2)) AS CleanPrice
FROM Products;

Una Lista de Verificación Sencilla para Limpiar Datos

Cuando te entreguen una tabla nueva y desordenada, repasa estas preguntas en orden:

  1. ¿Hay espacios de más? Usa TRIM() en las columnas de texto.
  2. ¿La capitalización es inconsistente? Estandarízala con UPPER() o LOWER().
  3. ¿Hay valores faltantes? Decide entre valores predeterminados con COALESCE() o filtrar con IS NULL.
  4. ¿Hay filas duplicadas? Encuéntralas con GROUP BY/HAVING y elimínalas con ROW_NUMBER().
  5. ¿Los valores de texto son inconsistentes? Conviértelos a valores estándar con CASE.
  6. ¿Hay fechas o números guardados como texto? Conviértelos con CAST o con funciones de conversión específicas de tu base de datos.

Errores Comunes que Debes Evitar

  • Ejecutar UPDATE o DELETE sin una cláusula WHERE probada antes como SELECT. Siempre previsualiza qué filas se verán afectadas antes de modificar datos.
  • Limpiar datos sin un respaldo. Haz una copia de la tabla, o trabaja dentro de una transacción, antes de realizar operaciones de limpieza masivas.
  • Suponer que una sola pasada de limpieza es suficiente. Los datos desordenados suelen tener varios problemas superpuestos (espacios y capitalización inconsistente y duplicados), así que vuelve a revisar tu lista después de cada corrección.

Conclusión

Limpiar datos desordenados con SQL puro es una habilidad práctica y de gran valor para cualquier analista de datos principiante, usuario de Excel o aspirante a programador SQL. Con funciones como TRIM(), COALESCE(), CASE, CAST y funciones de ventana como ROW_NUMBER(), puedes corregir espacios en blanco, valores faltantes, formatos inconsistentes y registros duplicados directamente dentro de tu base de datos, sin herramientas externas.

La lista de verificación de esta guía (revisar espacios en blanco, capitalización inconsistente, valores faltantes, duplicados, texto inconsistente y tipos de datos incorrectos) te da un proceso repetible que puedes aplicar a casi cualquier tabla desordenada que encuentres. Practica estas técnicas con tus propios conjuntos de datos y siempre previsualiza los cambios con un SELECT antes de ejecutar un UPDATE o un DELETE.

Cuando te sientas cómodo limpiando datos desordenados con SQL puro, pasarás mucho menos tiempo peleando con reportes rotos y números inconsistentes, y mucho más tiempo analizando la información que tus datos estaban destinados a revelar.