Antes de aprender qué significa cada sentencia de SQL conviene aprender cómo está escrita. Igual que en cualquier idioma, existen reglas ortográficas y gramaticales que, si desconoces, te harán perder horas frente a mensajes de error crípticos. Esta lección desmonta una sentencia SQL en sus piezas elementales —palabras clave, identificadores, literales, operadores y expresiones— y te explica las reglas del lenguaje: el punto y coma, el tratamiento de mayúsculas y minúsculas, los comentarios, las convenciones de estilo profesional, la precedencia de operadores y, muy importante, cómo interpretar un mensaje de error de PostgreSQL para localizar el fallo en segundos.

Aquí usaremos sentencias muy simples como vehículo. No es el objetivo aprender aún qué hace SELECT o WHERE —eso es el módulo 2—; el objetivo es entender las reglas ortográficas con las que se escribe cualquier sentencia SQL.

Contenido

  1. Anatomía de una sentencia SQL
  2. El punto y coma
  3. Mayúsculas y minúsculas
  4. Identificadores entrecomillados
  5. Comentarios
  6. Convenciones de estilo y formato
  7. Operadores y su precedencia
  8. Literales: cadenas, números, fechas, booleanos y NULL
  9. Cómo leer un mensaje de error de PostgreSQL
  10. Errores Comunes y Consejos
  11. Ejercicios
  12. Conclusión

  1. Anatomía de una sentencia SQL

Toda sentencia SQL se compone de un puñado de tipos de elemento. Veamos una y etiquetemos cada pieza:

SELECT nombre, precio * 1.21 AS precio_con_iva
FROM productos
WHERE activo = TRUE AND precio > 10.00;
Elemento En el ejemplo Qué es
Palabras clave SELECT, FROM, WHERE, AS, AND, TRUE Términos reservados del lenguaje
Identificadores nombre, precio, productos, activo, precio_con_iva Nombres de tablas, columnas, alias, esquemas
Literales 1.21, 10.00, TRUE Valores escritos directamente en el texto
Operadores *, =, >, AND Símbolos o palabras que combinan valores
Expresiones precio * 1.21, activo = TRUE AND precio > 10.00 Combinaciones de lo anterior que producen un valor
Cláusulas SELECT ..., FROM ..., WHERE ... Bloques que estructuran la sentencia
Terminador ; Marca el final de la sentencia

Merece la pena detenerse en la diferencia entre palabra clave e identificador, porque es la fuente de la mitad de los errores de principiante:

  • Una palabra clave forma parte del lenguaje. No la eliges tú: SELECT siempre significa lo mismo.
  • Un identificador es un nombre que alguien puso a un objeto: la tabla productos se llama así porque quien diseñó TiendaVerde lo decidió.

Reglas de los identificadores en PostgreSQL:

  • Empiezan por letra o _, y siguen con letras, dígitos, _ o $.
  • Longitud máxima: 63 caracteres (lo que sobra se trunca en silencio).
  • No pueden coincidir con una palabra reservada... salvo que los entrecomilles (sección 4).
  • Se recomienda snake_case en minúsculas: lineas_pedido, fecha_pedido, referido_por_id.

Una expresión es cualquier cosa que se evalúa y produce un valor. Puedes comprobarlo sin ninguna tabla:

SELECT 2 + 3;
?column?
5

En PostgreSQL, SELECT sin FROM es perfectamente válido y es la mejor forma de experimentar con expresiones sueltas. Lo usaremos mucho en esta lección.

  1. El punto y coma

El ; marca el final de una sentencia. Su papel es doble:

  1. Separar varias sentencias en un mismo fichero o bloque.
  2. Indicar al cliente que ya puede enviar la sentencia al servidor.
SELECT 1;
SELECT 2;
SELECT 3;

Esas son tres sentencias independientes. Sin los puntos y coma, PostgreSQL leería SELECT 1 SELECT 2 SELECT 3 e informaría de un error de sintaxis.

Si en psql pulsas Intro sin haber cerrado la sentencia, el símbolo del sistema cambia:

tiendaverde=# SELECT nombre
tiendaverde-# FROM productos
tiendaverde-# ;

Ese guion (-#) significa "sigo esperando". No es un error: puedes repartir una sentencia en tantas líneas como quieras.

Situación ¿Hace falta ;?
Una sola sentencia en un cliente gráfico Opcional, pero recomendable
Varias sentencias en un fichero .sql Obligatorio
Metacomandos de psql (\dt, \l, \q) No, no son SQL
Última sentencia de un fichero Recomendable (evita sorpresas al concatenar ficheros)

Consejo: ponlo siempre. Es gratis y te ahorra depurar por qué un script se ejecutó "a medias".

  1. Mayúsculas y minúsculas

Aquí hay dos reglas distintas que conviene no mezclar.

3.1. Las palabras clave no distinguen mayúsculas

Estas cuatro sentencias son idénticas para PostgreSQL:

SELECT nombre FROM productos;
select nombre from productos;
Select Nombre From Productos;
sELeCt nombre FrOm productos;

Aun así, la convención universal es escribir las palabras clave en MAYÚSCULAS, porque hace la consulta mucho más legible: de un vistazo distingues la estructura del lenguaje de los nombres de tu esquema.

3.2. Los identificadores sin comillas se convierten a minúsculas

Esta es la parte que sorprende. El estándar SQL dice que los identificadores sin comillas deben plegarse a mayúsculas; PostgreSQL, por razones históricas, los pliega a minúsculas. El efecto práctico es que:

SELECT Nombre FROM Productos;

es exactamente lo mismo que:

SELECT nombre FROM productos;

porque PostgreSQL convierte internamente Nombrenombre y Productosproductos.

Compáralo entre motores:

SGBD Palabras clave Identificadores sin comillas Nombres de tabla
PostgreSQL Insensibles Se pliegan a minúsculas Insensibles (por el plegado)
MySQL en Linux Insensibles Se conservan tal cual Sensibles a mayúsculas
MySQL en Windows/macOS Insensibles Se conservan tal cual Insensibles (por el sistema de ficheros)
SQLite Insensibles Se conservan tal cual Insensibles
Oracle Insensibles Se pliegan a MAYÚSCULAS Insensibles (por el plegado)

Moraleja práctica: usa siempre minúsculas y snake_case en tus identificadores. Así tu SQL se comporta igual en todos los motores y te ahorras el problema entero.

Ojo: la insensibilidad a mayúsculas afecta a la sintaxis, no a los datos. Los valores sí distinguen:

SELECT 'Valencia' = 'valencia';
?column?
false

  1. Identificadores entrecomillados

Si rodeas un identificador con comillas dobles, PostgreSQL lo toma literalmente: respeta mayúsculas, espacios y caracteres especiales.

-- Estas dos tablas serían DISTINTAS para PostgreSQL
CREATE TABLE productos (...);     -- se llama internamente: productos
CREATE TABLE "Productos" (...);   -- se llama internamente: Productos

Y a partir de ahí, cualquier referencia a la segunda obliga a repetir las comillas:

SELECT * FROM "Productos";   -- funciona
SELECT * FROM Productos;     -- ERROR: relation "productos" does not exist

Ese error es de los más desconcertantes: la tabla existe, se ve en \dt, y aun así el motor dice que no la encuentra. La causa es siempre la misma: alguien la creó entrecomillada con mayúsculas.

Uso de comillas dobles Cuándo es legítimo
Identificador que coincide con palabra reservada ("order", "user") Aceptable, aunque es mejor renombrarlo
Identificador con espacios ("nombre del cliente") Evitar siempre
Identificador con mayúsculas ("FechaPedido") Evitar siempre
Alias que quieres mostrar bonito en un informe (AS "Precio con IVA") Uso razonable

Regla del curso: todas las tablas y columnas de TiendaVerde están en minúsculas y snake_case precisamente para que nunca necesites comillas dobles. La única excepción aceptable serán los alias de presentación.

Y no lo olvides: comillas dobles = identificador; comillas simples = cadena de texto. No son intercambiables (volveremos a ello en la sección 8).

  1. Comentarios

SQL admite dos formas de comentario:

-- Comentario de una línea: desde los dos guiones hasta el fin de línea

/* Comentario de bloque:
   puede ocupar varias líneas
   y es útil para desactivar trozos de consulta */

SELECT nombre,          -- el nombre comercial del producto
       precio           /* precio de venta al público, sin IVA */
FROM productos;
Forma Sintaxis Uso típico
Línea -- texto Anotar una columna o una condición
Bloque /* texto */ Cabeceras de script, desactivar temporalmente varias líneas

En PostgreSQL los comentarios de bloque se pueden anidar, algo que no todos los motores permiten:

/* nivel 1 /* nivel 2 */ sigo en nivel 1 */
SELECT 1;

Buenas prácticas con los comentarios:

  • Comenta el porqué, no el qué. -- filtramos activos sobra si la línea ya dice WHERE activo = TRUE. En cambio -- los inactivos son productos descatalogados que conservamos por histórico sí aporta.
  • Encabeza los scripts largos con un bloque que explique qué hacen y quién los mantiene.
  • Usa -- para desactivar una línea mientras depuras, pero limpia esos restos antes de dar la consulta por buena.

  1. Convenciones de estilo y formato

SQL ignora los saltos de línea y los espacios de más, así que el formato es enteramente para las personas. Y sí, importa: una consulta de veinte líneas mal formateada es imposible de revisar.

Antes (todo en una línea, palabras clave en minúsculas, sin estructura):

select p.nombre, c.nombre, p.precio from productos p join categorias c on p.categoria_id = c.id where p.activo = true and p.precio between 5 and 20 order by p.precio desc;

Después (una cláusula por línea, palabras clave en mayúsculas, alineación clara):

SELECT p.nombre,
       c.nombre AS categoria,
       p.precio
FROM productos AS p
JOIN categorias AS c ON p.categoria_id = c.id
WHERE p.activo = TRUE
  AND p.precio BETWEEN 5 AND 20
ORDER BY p.precio DESC;

Las dos hacen exactamente lo mismo. La segunda se puede leer, revisar y modificar.

Convenciones que sigue este curso (y que son las más extendidas del sector):

Regla Ejemplo
Palabras clave en MAYÚSCULAS SELECT, FROM, WHERE, AND
Identificadores en minúsculas y snake_case lineas_pedido, fecha_pedido
Una cláusula principal por línea SELECT / FROM / WHERE / ORDER BY en líneas propias
Condiciones adicionales indentadas bajo WHERE AND p.precio > 10
Listas largas de columnas, una por línea Facilita ver los cambios en Git
Tablas en plural, columnas en singular Tabla clientes, columna nombre
Claves foráneas como <tabla_singular>_id cliente_id, producto_id, categoria_id
Sin espacios ni tildes en identificadores resenas, no reseñas
Nunca SELECT * en código de producción Nombra las columnas explícitamente

Fíjate en que la tabla se llama resenas y no reseñas. Es deliberado: evitar ñ y tildes en identificadores previene problemas de codificación, de portabilidad entre motores y de escritura en teclados no españoles.

  1. Operadores y su precedencia

7.1. Aritméticos

Operador Significado Ejemplo Resultado
+ Suma SELECT 10 + 3; 13
- Resta SELECT 10 - 3; 7
* Multiplicación SELECT 10 * 3; 30
/ División SELECT 10 / 3; 3
% Módulo (resto) SELECT 10 % 3; 1
^ Potencia SELECT 2 ^ 10; 1024

La trampa está en /: si ambos operandos son enteros, la división es entera.

SELECT 10 / 3 AS division_entera,
       10.0 / 3 AS division_decimal;
division_entera division_decimal
3 3.3333333333333333

Con solo escribir 10.0 en lugar de 10 cambias el tipo del literal y con él el resultado. Es una fuente clásica de descuadres al calcular porcentajes.

7.2. De comparación

Operador Significado Ejemplo
= Igual precio = 10
<> o != Distinto estado <> 'cancelado'
<, > Menor, mayor stock > 0
<=, >= Menor o igual, mayor o igual precio <= 20
BETWEEN ... AND ... Dentro de un rango, extremos incluidos precio BETWEEN 5 AND 20
IN (...) Pertenece a una lista pais IN ('España','Francia')
IS NULL / IS NOT NULL Es (o no) nulo empleado_id IS NULL

<> es la forma estándar de "distinto"; != funciona en PostgreSQL y en casi todos los motores, pero <> es más portable. Los operadores BETWEEN, IN, LIKE y IS NULL se estudian a fondo en el módulo 4.

7.3. Lógicos

Operador Devuelve verdadero cuando...
AND Ambas condiciones son verdaderas
OR Al menos una condición es verdadera
NOT La condición es falsa

7.4. Precedencia

Cuando mezclas operadores, PostgreSQL los evalúa en este orden (de mayor a menor prioridad):

Nivel Operadores
1 () paréntesis
2 :: conversión de tipo
3 - unario (signo negativo)
4 ^ potencia
5 *, /, %
6 +, -
7 BETWEEN, IN, LIKE
8 =, <>, <, >, <=, >=
9 IS NULL, IS NOT NULL
10 NOT
11 AND
12 OR

Lo que más problemas causa es que AND tiene mayor prioridad que OR. Compara:

SELECT TRUE OR FALSE AND FALSE;    -- se evalúa como: TRUE OR (FALSE AND FALSE)
SELECT (TRUE OR FALSE) AND FALSE;  -- forzamos otro orden con paréntesis
Consulta Resultado
TRUE OR FALSE AND FALSE true
(TRUE OR FALSE) AND FALSE false

Traducido a un caso real de TiendaVerde: "quiero los pedidos de Francia o Portugal que estén entregados". Escrito ingenuamente:

-- MAL: se interpreta como  pais='Francia' OR (pais='Portugal' AND estado='entregado')
... WHERE pais = 'Francia' OR pais = 'Portugal' AND estado = 'entregado'

-- BIEN
... WHERE (pais = 'Francia' OR pais = 'Portugal') AND estado = 'entregado'

La primera versión te devolvería todos los pedidos franceses, entregados o no. No da error: da un resultado incorrecto en silencio, que es mucho peor.

Consejo profesional: aunque te sepas la tabla de precedencia, pon paréntesis siempre que mezcles AND y OR. Cuestan dos caracteres y eliminan la ambigüedad para quien lea tu consulta después.

  1. Literales: cadenas, números, fechas, booleanos y NULL

Un literal es un valor escrito directamente en la sentencia.

8.1. Cadenas de texto: comillas SIMPLES

SELECT 'Alimentación';
SELECT 'Valencia';

Las cadenas van entre comillas simples. Siempre. Este es probablemente el error número uno de quien viene de otros lenguajes de programación, donde "texto" y 'texto' son equivalentes:

SELECT "Alimentación";
ERROR:  column "Alimentación" does not exist
LINE 1: SELECT "Alimentación";
               ^

El mensaje delata lo que ha pasado: PostgreSQL ha entendido las comillas dobles como un identificador, ha buscado una columna llamada Alimentación y no la ha encontrado.

¿Y si el texto contiene una comilla simple, como en "L'Eliana"? Se duplica:

SELECT 'L''Eliana' AS poblacion;
poblacion
L'Eliana

PostgreSQL también admite las dollar-quoted strings, muy cómodas para textos con muchas comillas:

SELECT $$El comentario decía: 'no me gustó'$$;

8.2. Numéricos

SELECT 42;         -- entero
SELECT -17;        -- entero negativo
SELECT 12.50;      -- decimal exacto (tipo numeric)
SELECT 1.2e3;      -- notación científica: 1200

Los números no llevan comillas. Si escribes '12.50' estás creando una cadena de texto que PostgreSQL a veces convertirá por ti y a veces no, con resultados sorprendentes.

8.3. Fechas y horas

Las fechas se escriben como cadenas de texto, entre comillas simples, en formato ISO 8601 (AAAA-MM-DD):

SELECT DATE '2026-02-14' AS fecha;
SELECT TIMESTAMP '2026-02-14 18:30:00' AS momento;
SELECT '2026-02-14'::DATE AS fecha_con_cast;
fecha
2026-02-14

Escribe siempre en formato ISO. Si escribes '14/02/2026', el motor lo interpretará según su configuración regional (DateStyle), y en un servidor configurado a la americana '03/04/2026' puede significar 3 de abril o 4 de marzo. Es un error que no salta nunca: simplemente produce datos incorrectos. Las funciones de fecha se ven a fondo en el módulo 6.

8.4. Booleanos

SELECT TRUE, FALSE;

PostgreSQL acepta varias formas de escribirlos: TRUE/FALSE, 't'/'f', 'yes'/'no', '1'/'0'. Usa TRUE y FALSE a secas: es lo más claro.

Nota de dialecto: MySQL no tiene un tipo booleano real; BOOLEAN es un alias de TINYINT(1) donde TRUE es 1 y FALSE es 0. SQLite tampoco tiene booleano nativo: los guarda como 0 y 1.

8.5. NULL

NULL no es un valor: es la ausencia de valor. En TiendaVerde, pedidos.empleado_id es NULL cuando el pedido llegó por la web y ningún comercial lo gestionó.

Lo que importa ahora, sintácticamente, es que NULL no se compara con =:

SELECT NULL = NULL AS con_igual,
       NULL IS NULL AS con_is_null;
con_igual con_is_null
(null) true

NULL = NULL no da ni verdadero ni falso: da NULL, porque comparar dos incógnitas no permite concluir nada. Por eso existe el operador IS NULL. La semántica completa de los nulos se estudia en la lección 04-03; aquí basta con que retengas la regla: para nulos, IS NULL; nunca = NULL.

8.6. Resumen de literales

Tipo Cómo se escribe Ejemplo correcto Error típico
Cadena Comillas simples 'Cosmética natural' "Cosmética natural" (sería un identificador)
Número Sin comillas 12.50 '12.50'
Fecha Comillas simples, formato ISO '2026-02-14' '14/02/2026'
Booleano Sin comillas TRUE 'TRUE'
Nulo Palabra clave NULL IS NULL = NULL

  1. Cómo leer un mensaje de error de PostgreSQL

Los mensajes de PostgreSQL son de los mejores del sector, pero hay que saber leerlos. Tienen hasta cuatro partes:

ERROR:  syntax error at or near "FORM"
LINE 2: FORM productos;
        ^
Parte Significado
ERROR: La descripción del problema
at or near "FORM" El token donde el analizador se atascó
LINE 2: La línea de tu sentencia
^ La columna exacta

La clave está en la expresión "at or near" ("en o cerca de"). PostgreSQL señala dónde detectó el problema, que muy a menudo es una posición después de donde realmente está el error. Si el cursor apunta a algo que parece correcto, mira siempre el token anterior.

Ejemplo real:

SELECT nombre precio FROM productos;
ERROR:  syntax error at or near "FROM"
LINE 1: SELECT nombre precio FROM productos;
                             ^

El cursor apunta a FROM, pero FROM está perfectamente escrito. El error real es que falta una coma entre nombre y precio: PostgreSQL interpretó precio como un alias de nombre (un alias puede escribirse sin AS), y al llegar a FROM ya no encajaba nada más.

Los errores más frecuentes al empezar y su traducción:

Mensaje Qué significa realmente Cómo se arregla
syntax error at or near "X" Gramática rota en X o justo antes Revisa el token anterior: comas, paréntesis, palabras mal escritas
relation "productos" does not exist La tabla no existe, o está en otro esquema, o se creó con comillas y mayúsculas \dt para ver el nombre real; comprueba a qué base estás conectado
column "Alimentación" does not exist Usaste comillas dobles para una cadena de texto Cambia a comillas simples
column "prcio" does not exist Errata en el nombre de la columna \d productos para ver los nombres exactos
operator does not exist: text > integer Estás comparando tipos incompatibles Revisa el tipo de la columna; usa CAST (módulo 6)
unterminated quoted string at or near "'..." Falta cerrar una comilla simple Cuenta las comillas; si estás en psql, el símbolo '# te avisa
division by zero Divides entre 0 Protege el divisor (NULLIF, módulo 6)

Procedimiento recomendado ante cualquier error:

  1. Lee el mensaje entero, no solo la primera palabra.
  2. Localiza la línea y la columna con el ^.
  3. Si lo señalado parece correcto, mira lo anterior.
  4. Comprueba lo básico: comas, paréntesis equilibrados, comillas cerradas, tipo de comilla.
  5. Si es un nombre, verifícalo con \d.
  6. Si la consulta es larga, redúcela: quita cláusulas hasta que funcione y añádelas de nuevo una a una.

Errores Comunes y Consejos

  • Usar comillas dobles para texto. "Valencia" es un identificador; 'Valencia' es una cadena. Si el error habla de una "column ... does not exist" con el texto que querías buscar, es esto.
  • Olvidar la coma entre columnas. Produce un syntax error at or near "FROM" que despista mucho, porque FROM está bien.
  • Crear objetos con "MayúsculasEntrecomilladas". Te condena a repetir las comillas para siempre. Usa snake_case en minúsculas.
  • Confiar en la precedencia de AND/OR. No da error, da resultados equivocados. Pon paréntesis.
  • División entera inesperada. 10 / 3 es 3. Convierte a decimal antes de calcular porcentajes o medias.
  • Fechas en formato local. Escribe siempre 'AAAA-MM-DD'.
  • Comparar con = NULL. No devuelve filas nunca, y no avisa. Usa IS NULL.
  • Consejo: formatea antes de depurar. Una consulta de una sola línea es imposible de revisar; ponla en varias líneas y el error suele saltar a la vista.
  • Consejo: prueba las expresiones con SELECT sin FROM. Antes de meter un cálculo en una consulta grande, verifícalo aislado: SELECT 12.50 * 1.21;.
  • Consejo: cuando algo falle, simplifica. Quita mitad de la consulta y comprueba si el error persiste. Es la forma más rápida de acotar.

Ejercicios

Ejercicio 1

Localiza y corrige cuatro errores de sintaxis en la siguiente sentencia. Indica qué mensaje daría PostgreSQL en cada caso.

SELECT nombre precio, stock
FORM productos
WHERE ciudad = "Valencia"
  AND activo = TRUE

Ejercicio 2

Sin ejecutar nada, predice el resultado de estas cinco expresiones y explica por qué. Después compruébalas con SELECT.

SELECT 7 / 2;
SELECT 7.0 / 2;
SELECT TRUE OR FALSE AND FALSE;
SELECT 'Valencia' = 'valencia';
SELECT NULL = NULL;

Ejercicio 3

Reescribe esta consulta aplicando las convenciones de estilo del curso (palabras clave en mayúsculas, una cláusula por línea, indentación de las condiciones) y corrige el fallo lógico que contiene: la intención era obtener los pedidos pagados o enviados cuyos gastos de envío superen los 5 €.

select id, estado, gastos_envio from pedidos where estado = 'pagado' or estado = 'enviado' and gastos_envio > 5;

Soluciones

Solución 1

Los cuatro errores, en orden de aparición:

# Error Mensaje de PostgreSQL Corrección
1 Falta la coma entre nombre y precio syntax error at or near "precio" (o cerca de FORM) SELECT nombre, precio, stock
2 FORM en lugar de FROM syntax error at or near "FORM" FROM productos
3 Comillas dobles en la cadena "Valencia" column "Valencia" does not exist = 'Valencia'
4 Falta el punto y coma final En psql, el símbolo se queda en -# esperando Añadir ;

Hay además un problema semántico: la tabla productos de TiendaVerde no tiene columna ciudad (esa columna está en clientes y en empleados). PostgreSQL respondería column "ciudad" does not exist. Versión corregida:

SELECT nombre, precio, stock
FROM productos
WHERE activo = TRUE;

Solución 2

Expresión Resultado Motivo
7 / 2 3 Ambos operandos son enteros → división entera, se trunca (no se redondea)
7.0 / 2 3.5000000000000000 7.0 es numeric, así que la división es decimal
TRUE OR FALSE AND FALSE true AND tiene más prioridad: se evalúa TRUE OR (FALSE AND FALSE) = TRUE OR FALSE
'Valencia' = 'valencia' false Los datos sí distinguen mayúsculas, aunque la sintaxis no
NULL = NULL NULL Comparar dos ausencias de valor no permite concluir nada; hay que usar IS NULL

Fíjate en el contraste entre las filas 3, 4 y 5: en SQL la insensibilidad a mayúsculas es cosa de la gramática, nunca de los valores, y NULL no se comporta como un valor normal.

Solución 3

El fallo lógico es la precedencia: AND se evalúa antes que OR, de modo que la consulta original significa estado = 'pagado' OR (estado = 'enviado' AND gastos_envio > 5), y devolvería todos los pedidos pagados, incluso los de envío gratuito. Versión corregida y formateada:

SELECT id,
       estado,
       gastos_envio
FROM pedidos
WHERE (estado = 'pagado' OR estado = 'enviado')
  AND gastos_envio > 5;

Los paréntesis agrupan la alternativa de estados antes de aplicar el filtro de importe. En el módulo 4 verás una forma todavía más legible de escribir esa primera condición: estado IN ('pagado', 'enviado').

Conclusión

Ya conoces las reglas ortográficas del lenguaje:

  • Una sentencia se compone de palabras clave, identificadores, literales, operadores y expresiones, organizados en cláusulas y cerrados por ;.
  • Las palabras clave no distinguen mayúsculas, pero los identificadores sin comillas se pliegan a minúsculas en PostgreSQL: por eso el curso usa snake_case en minúsculas y evita las comillas dobles.
  • Comentas con -- y /* */, y formateas con una cláusula por línea porque el SQL se escribe una vez y se lee muchas.
  • Dominas los operadores aritméticos, de comparación y lógicos, y sabes que AND precede a OR: por eso pones paréntesis.
  • Distingues los literales: comillas simples para texto y fechas ISO, nada de comillas para números y booleanos, y IS NULL para los nulos.
  • Sabes leer un error de PostgreSQL: mensaje, token, línea y cursor, recordando que el fallo suele estar justo antes de lo señalado.

En la siguiente lección, Entendiendo bases de datos y tablas, pasaremos de la forma al contenido: qué es exactamente una base de datos, un esquema, una tabla, una fila y una columna; qué tipos de datos ofrece PostgreSQL y cómo elegir el adecuado (incluido por qué el dinero nunca debe guardarse en un FLOAT); y cómo inspeccionar la estructura de tablas que ya existen.

Curso de SQL

Módulo 1: Introducción a SQL

Módulo 2: Consultas básicas de SQL

Módulo 3: Trabajando con múltiples tablas

Módulo 4: Filtrado avanzado de datos

Módulo 5: Manipulación de datos

Módulo 6: Funciones avanzadas de SQL

Módulo 7: Subconsultas y consultas anidadas

Módulo 8: Índices y optimización de rendimiento

Módulo 9: Transacciones y concurrencia

Módulo 10: Temas avanzados

Módulo 11: SQL en la práctica

Módulo 12: Proyecto final

© Copyright 2026. Todos los derechos reservados