¿Por qué escribir una sentencia SQL en mayúscula o minúscula no marca error?

publicado por: Anonymous

A través de los años he notado que al escribir una sentencia SQL (por lo menos en los manejadores que más uso como SQL Server o SQL Developer) funciona de la misma forma si las escribes en mayúsculas como en minúsculas, tanto para las palabras reservadas como nombres de tablas y columnas.

Por ejemplo, tomando como base la siguiente sentencia SQL:

SELECT 
    A.ColumnaA, A.ColumnaB, B.ColumnaC
FROM TablaA AS A
    INNER JOIN TablaB B
        ON A.ColumnaA = B.ColumnaA
WHERE B.ColumnaB = 123
AND A.ColumnaC = 'ABC'

Si se escribe en minúsculas:

select 
    a.columnaa, a.columnab, b.columnac
from tablaa as a
    inner join tablab b
        on a.columnaa = b.columnaa
where b.columnab = 123
and a.columnac = 'abc'

O si se escribe en mayúsculas:

SELECT 
    A.COLUMNAA, A.COLUMNAB, B.COLUMNAC
FROM TABLAA AS A
    INNER JOIN TABLAB B
        ON A.COLUMNAA = B.COLUMNAA
WHERE B.COLUMNAB = 123
AND A.COLUMNAC = 'ABC'

No se genera ningún error, a diferencia de otros lenguajes que son totalmente restrictivos tanto para el uso de palabras reservadas como para nombres de variables.

No obstante, lo ideal es siempre escribir las palabras reservadas en mayúsculas y dejando los nombres de tablas o columnas a consideración del programador.

Incluso, al hacer uso del plugin Poor Man’s T-SQL Formatter para Notepad++ da un formato a las palabras reservadas poniéndolas en mayúsculas e identa el query realizado (un plugin maravilloso).

Aunque el manejador no marque ningún error en el uso de mayúsuculas o minúsculas, me surgen principalmente dos dudas:

  1. ¿Por qué escribir una sentencia SQL en mayúscula o minúscula no marca error?
  2. ¿Por qué se prefiere o se recomienda hacer uso de las mayúsculas?

solución

¿Por qué escribir una sentencia SQL en mayúscula o minúscula no marca error?

Hay lenguajes de programación que distinguen entre mayúsculas y minúsculas (case sensitive o “sensibles a la caja”), y otros que no distinguen (case insensitive).

SQL es un lenguaje que no distingue entre mayúsculas o minúsculas (case insensitive, o no es “sensible a la caja”) para las palabras reservadas. Por eso cuando se analiza la sentencia, no se lanza ningún error. Por ejemplo, no importa escribir SELECT o select o sELect, todas se interpretarán igual.

Es importante destacar la parte de “para las palabras reservadas” porque dependiendo del motor de base de datos que se use, el sistema operativo en el que se encuentre la base de datos, o del formato que se le dé a la consulta, sí que podría haber diferencias en los nombres de tablas o columnas. Por ejemplo:

  • En algunas plataformas, en MySQL el uso de mayúsculas/minúsculas en los nombres de tablas debe ser consistente dentro de la misma sentencia o se producirá un fallo (fuente). La siguiente sentencia mostraría un error:

    SELECT * FROM personas WHERE PERSONAS.nombre = 'Juan'
    
  • En MySQL, los nombres de las bases de datos y las tablas distinguen entre mayúsculas y minúsculas en sistemas operativos que hace esa distinción. Eso se debe a que están asociados a directorios/archivos del sistema de ficheros (fuente).

  • En Oracle, se puede forzar que los nombres de tablas y columnas sean case sensitive si se ponen entre comillas dobles (fuente Oracle y SOen). Así estas dos sentencias serían diferentes:

    SELECT * FROM personas WHERE Nombre = 'Juan'
    SELECT * FROM "Personas" WHERE "nombre" = 'Juan'
    

¿Por qué se prefiere o se recomienda hacer uso de las mayúsculas?

Es una manera de diferenciar las palabras reservadas de las que no lo son, facilitando la identificación de los nombres de tablas, columnas, etc.

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *