Volver a la lista de artículos Artículos
Lectura de 9 minutos

Errores SQL: Cinco errores comunes de SQL

Mientras aprendes SQL, ten cuidado con estos errores de codificación comunes

Has escrito un código SQL y estás listo para consultar tu base de datos. Introduce el código y .... no devuelve ningún dato. En su lugar, aparece un mensaje de error.

No te desesperes. Los errores de codificación son comunes en cualquier lenguaje de programación, y SQL no es una excepción. En este artículo, discutiremos cinco errores comunes que la gente comete al escribir SQL.

La mejor manera de prevenir los errores en SQL es la práctica. LearnSQL.es ofrece más de 30 cursos interactivos de SQL. Pruebe nuestro Ejercicio de SQL con 5 cursos y más de 600 ejercicios prácticos.

Cuidado con el lenguaje (y la sintaxis)

El error SQL más común es un error de sintaxis. ¿Qué significa sintaxis? Básicamente, significa un conjunto de palabras y comandos. Si utilizas una sintaxis incorrecta, la base de datos no sabe lo que estás tratando de decirle.

Para entender cómo funciona la sintaxis, podemos pensar en un lenguaje hablado. Imagina que le dices a una persona "Nice dof" cuando quieres decir "Nice dog". La persona no sabe lo que significa "dof". Así que cuando le dices a tu base de datos que busque una TABLA en lugar de un CUADRO, la base de datos no sabe lo que tiene que hacer.

La gente tiende a cometer los mismos tipos de errores de sintaxis, por lo que sus errores suelen ser fáciles de detectar y muy parecidos. Después de leer este artículo, deberías ser capaz de recordar y evitar (o arreglar) estos errores comunes. Saber qué errores buscar es muy importante para los codificadores novatos de SQL, especialmente al principio. Los codificadores nuevos tienden a cometer más errores y a pasar más tiempo buscándolos.

Los tipos de errores SQL que veremos son

  1. Comandos mal escritos
  2. Olvidar los paréntesis y las comillas
  3. Especificar un Orden de Sentencia Inválido
  4. Omitir Alias de Tabla
  5. Uso de Nombres que distinguen mayúsculas y minúsculas

¿Preparado? Comencemos.

Errores SQL:

1. Comandos mal escritos

Este es el tipo de error SQL más común entre los desarrolladores novatos y experimentados por igual. Veamos qué aspecto tiene. Examina la sencilla sentencia SELECT que aparece a continuación y comprueba si puedes detectar el problema:

SELECT *
FORM dish
WHERE NAME = 'Prawn Salad';

Si ejecuta esta consulta, obtendrá un error que indica:

Syntax error in SQL statement "SELECT * FORM[*] dish WHERE NAME = 'Prawn Salad';"; 
SQL statement: SELECT * FORM dish WHERE NAME = 'Prawn Salad'; [42000-176]

Cada versión de la base de datos le indicará la palabra o frase exacta que no entiende, aunque el mensaje de error puede ser ligeramente diferente.

¿Qué es lo que está mal aquí? Has escrito mal FROM como FORM. Los errores ortográficos se encuentran comúnmente en las palabras clave (como SELECT, FROM y WHERE), o en los nombres de tablas y columnas.

Los errores ortográficos más comunes de SQL se deben a:

  • "Dedos gordos" donde se golpea una letra cerca de la correcta: SELEVT o FTOM o WJIRE
  • "Escritura imprudente " en la que se teclean las letras correctas en el orden incorrecto: SELETC o FORM o WHEER

Solución:

Utiliza un editor de SQL que tenga resaltado de sintaxis: las palabras clave SELECT y WHERE se resaltarán, pero el FORM mal escrito no se resaltará.

Si estás aprendiendo con cursos interactivos de SQL en LearnSQL.es el editor de código pone cada palabra clave de la sentencia SELECT en color púrpura claro. Si la palabra clave es negra, como lo es con cualquier otro argumento, sabes que hay un problema. (En nuestro ejemplo, FORM es negro).

Así que si corregimos nuestra declaración obtendremos:

SELECT *
FROM dish
WHERE NAME = 'Prawn Salad'

La palabra clave tiene ahora el color correcto y la sentencia se ejecuta sin error.

2. Olvidar los paréntesis y las comillas

Los corchetes agrupan las operaciones y guían el orden de ejecución. En SQL (y en todos los lenguajes de programación que utilizo), el siguiente orden de operaciones ...

SELECT *
FROM artist
WHERE first_name = 'Vincent' and last_name = 'Monet' or last_name = 'Da Vinci';

... no es el mismo que:

SELECT *
FROM artist
WHERE first_name = 'Vincent' and (last_name = 'Monet' or last_name = 'Da Vinci');

¿Puedes averiguar por qué?

Un error muy común en SQL es olvidar el corchete de cierre. Así que si miramos esta declaración errónea :

SELECT *
FROM artist
WHERE first_name = 'Vincent' and (last_name = 'Monet' or last_name = 'Da Vinci';

Obtenemos un código de error con la posición del error (el carácter 102 desde el principio):

ERROR: syntax error at or near ";" Position: 102

Recuerde: los corchetes siempre van por parejas.

Lo mismo ocurre con las comillas simples ( ' ' ) o las comillas dobles ( " " ). No hay ninguna situación en SQL en la que encontremos una comilla (ya sea simple o doble) sin su pareja. Los valores de texto de las columnas pueden contener una comilla ( por ejemplo, exp.last_name = "O'Reilly") y en estas situaciones debemos mezclar dos tipos de comillas o utilizar caracteres de escape. ( En SQL, el uso de caracteres de escape significa simplemente colocar otra comilla cerca del carácter que se quiere desactivar - por ejemplo, exp.last_name = 'O'’Reilly.)

Solución:

Practicar, practicar y practicar. Escribir más código SQL te dará la experiencia que necesitas para evitar estos errores. Y recuerda que la gente suele olvidar el corchete de cierre o las comillas. Rara vez omiten el de apertura. Si tienes problemas, ¡fíjate bien en la puntuación de cierre!

3. Orden inválido de las sentencias

Cuando escribas sentencias SELECT, ten en cuenta que hay un orden predefinido de palabras clave necesario para que la sentencia se ejecute correctamente. Aquí no hay margen de maniobra.

Veamos un ejemplo de una sentencia correctamente ordenada:

SELECT name
FROM dish
WHERE name = 'Prawn Salad'
GROUP BY name
HAVING count(*) = 1
ORDER BY name;

No hay ningún atajo aquí; simplemente tiene que recordar el orden correcto de las palabras clave para la sentencia SELECT:

  • SELECT identifica los nombres de las columnas y las funciones
  • FROM especifica el nombre o los nombres de las tablas (y las condiciones de JOIN si se utilizan varias tablas)
  • WHERE define las sentencias de filtrado
  • GROUP BY muestra cómo agrupar las columnas
  • HAVING filtra los valores agrupados
  • ORDER BY establece el orden en que se mostrarán los resultados

No puede escribir una palabra clave WHERE antes de una FROM, y no puede poner una HAVING antes de una GROUP BY. La sentencia no sería válida.

Veamos qué ocurre cuando se confunde el orden de las sentencias. En este caso, usaremos el error SQL común de colocar ORDER BY antes de GROUP BY:

SELECT name
FROM dish
WHERE name = 'Prawn Salad'
ORDER BY name
GROUP BY name
HAVING count(*) = 1

El mensaje de error que vemos es bastante intimidante.

Syntax error in SQL statement "SELECT name FROM dish WHERE name = 'Prawn Salad' 
ORDER BY name GROUP[*] BY name HAVING count(*) = 1;"; SQL statement: 
SELECT name FROM dish WHERE name = 'Prawn Salad' ORDER BY name GROUP BY 
name HAVING count(*) = 1; [42000-176]

Solución:

¡No se desanime! Puedes ver que todas las palabras clave están resaltadas correctamente y todas las citas y paréntesis están cerrados. Así que ahora deberías comprobar el orden de las sentencias. Cuando estés empezando tus estudios de SQL, te sugiero que utilices una lista de comprobación del orden en SELECT. Si te encuentras con un problema, consulta tu lista para saber el orden correcto.

4. Omitir los Alias de Tabla

Al unir tablas, la creación de alias de tablas es una práctica popular. Estos alias distinguen entre columnas con el mismo nombre en todas las tablas; así la base de datos sabrá qué valores de columna debe devolver. Esto no es obligatorio cuando estamos uniendo diferentes tablas, ya que podemos utilizar los nombres completos de las tablas. Pero es obligatorio si unimos una tabla a sí misma.

Supongamos que escribimos una sentencia SQL para encontrar la ubicación actual de una exposición y la ubicación del año anterior:

SELECT *
FROM exhibit
    JOIN exhibit ON (id = previous_id);

La base de datos devolvería un error:

Ambiguous column name "id"; SQL statement: SELECT * FROM exhibit JOIN exhibit ON (id = previous_id); [90059-176]

Nota: Siempre que encuentre "nombre de columna ambiguo" en el mensaje de error, seguramente necesitará alias de tabla.

La sentencia correcta (con alias) sería:

SELECT ex.* , exp.name
FROM exhibit
    JOIN exhibit ON (ex.id = exp.previous_id);

Solución:

Practique el uso de alias de tablas para las sentencias de una sola tabla SELECT. Utilice los alias con frecuencia: hacen que su SQL sea más legible.

5. Uso de nombres que distinguen mayúsculas y minúsculas

Este error sólo se produce cuando necesita escribir nombres no estándar para tablas u objetos de la base de datos.

Digamos que necesita tener una tabla llamada LargeClient y por alguna razón añade otra tabla llamada LARGECLIENT. Como ya sabe, los nombres de los objetos en las bases de datos no suelen distinguir entre mayúsculas y minúsculas. Así que cuando escriba una consulta para la tabla LargeClient, la base de datos consultará realmente LARGECLIENT.

Para evitar esto, debe poner comillas dobles alrededor del nombre de la tabla. Por ejemplo:

SELECT * FROM
"LargeClient"
 WHERE cust_name = 'Mijona';

Al crear una tabla, deberá utilizar comillas dobles si:

  • La tabla tendrá un nombre que distingue entre mayúsculas y minúsculas.
  • El nombre de la tabla contiene caracteres especiales. Esto incluye el uso de un espacio en blanco, como "Cliente grande".

Solución:

Evite utilizar estos nombres si puede. Si no, ¡recuerde las comillas dobles!

Todo el mundo comete errores SQL

Estos son los cinco errores más comunes en el código SQL. Probablemente los cometerás muchas veces mientras aprendes este lenguaje. Recuerda que todo el mundo comete errores al escribir código. De hecho, cometer errores es una parte normal y predecible del desarrollo de software.

Así que no te desanimes. Cuando cometas errores en el futuro, intenta analizar tu código de forma estructurada. Con un análisis estructurado, podrás encontrar y corregir tus errores más rápidamente.

Si quieres conocer otros errores sintácticos que no he incluido aquí, házmelo saber. En un próximo artículo, veremos los errores no sintácticos. Éstos devuelven o modifican datos y, por tanto, son mucho más peligrosos. Suscríbete a nuestro blog para no perdértelo.