Test de SQL: ¿qué devuelve esta consulta? 24 preguntas

Este test de SQL tiene una sola pregunta, repetida 24 veces: ¿qué devuelve esta consulta? Todas trabajan sobre la misma base de datos de una tienda que usa el curso de SQL, con sus clientes, productos, pedidos y empleados, y repasan sus 8 lecciones: consultas, agrupaciones, JOIN, subconsultas, cambios en los datos, índices y funciones de ventana.

Elige una respuesta en cada pregunta y pulsa Corregir: verás tu nota, los aciertos por lección y la explicación de cada respuesta. Nada se envía a ningún sitio: el test se corrige en tu navegador. Cada consulta se ejecutó en SQLite 3.46, PostgreSQL 17 y MySQL 8.4, y los tres motores devuelven lo mismo, así que la respuesta vale para cualquiera de ellos.

Pregunta 1Lección 1: Primeros pasos

¿Qué tamaño tiene el resultado de esta consulta?

SELECT * FROM categorias;
Pregunta 2Lección 1: Primeros pasos

¿Qué devuelve esta consulta?

SELECT nombre, precio FROM productos WHERE id = 4;
Pregunta 3Lección 1: Primeros pasos

¿Qué devuelve esta consulta?

SELECT nombre, precio * 2 AS doble FROM productos WHERE id = 6;
Pregunta 4Lección 2: Consultar

¿Qué número devuelve?

SELECT COUNT(*) FROM clientes
WHERE pais = 'México' AND alta < '2026-01-01';
Pregunta 5Lección 2: Consultar

¿Qué productos devuelve, y en qué orden?

SELECT nombre FROM productos
WHERE precio BETWEEN 89.50 AND 119.00
ORDER BY precio;
Pregunta 6Lección 2: Consultar

¿Qué número devuelve?

SELECT COUNT(DISTINCT pais) FROM clientes;
Pregunta 7Lección 3: Agrupar y resumir

¿Qué devuelve esta consulta?

SELECT estado, COUNT(*) AS n
FROM pedidos
GROUP BY estado
HAVING COUNT(*) > 1
ORDER BY n DESC, estado;
Pregunta 8Lección 3: Agrupar y resumir

¿Qué número devuelve?

SELECT MAX(precio) - MIN(precio) AS rango
FROM productos
WHERE categoria_id = 3;
Pregunta 9Lección 3: Agrupar y resumir

¿Qué devuelve esta consulta?

SELECT CASE WHEN stock = 0 THEN 'agotado'
            WHEN stock < 10 THEN 'pocas'
            ELSE 'hay' END AS situacion,
       COUNT(*) AS n
FROM productos
GROUP BY situacion
ORDER BY n;
Pregunta 10Lección 4: JOIN

¿Qué número devuelve?

SELECT COUNT(*)
FROM pedidos p
JOIN clientes c ON c.id = p.cliente_id
WHERE c.pais = 'España';
Pregunta 11Lección 4: JOIN

¿Qué número devuelve?

SELECT COUNT(*)
FROM clientes c
LEFT JOIN pedidos p ON p.cliente_id = c.id;
Pregunta 12Lección 4: JOIN

¿Qué nombres devuelve?

SELECT e.nombre
FROM empleados e
JOIN empleados j ON j.id = e.jefe_id
WHERE j.nombre = 'Marta Ruiz'
ORDER BY e.nombre;
Pregunta 13Lección 5: Subconsultas y CTE

¿Qué productos devuelve?

SELECT nombre FROM productos
WHERE precio > (SELECT AVG(precio) FROM productos)
ORDER BY precio DESC;
Pregunta 14Lección 5: Subconsultas y CTE

¿Qué número devuelve?

SELECT COUNT(*) FROM clientes c
WHERE EXISTS (SELECT 1 FROM pedidos p
              WHERE p.cliente_id = c.id
                AND p.estado = 'entregado');
Pregunta 15Lección 5: Subconsultas y CTE

¿Qué número devuelve?

WITH RECURSIVE cadena AS (
  SELECT id, nombre, jefe_id FROM empleados WHERE nombre = 'Óscar Lara'
  UNION ALL
  SELECT e.id, e.nombre, e.jefe_id
  FROM empleados e JOIN cadena c ON e.id = c.jefe_id
)
SELECT COUNT(*) FROM cadena;
Pregunta 16Lección 6: Crear y modificar

La suma de todo el stock es 551 antes de empezar. ¿Qué devuelve el SELECT final?

UPDATE productos SET stock = stock - 1 WHERE stock > 20;
SELECT SUM(stock) FROM productos;
Pregunta 17Lección 6: Crear y modificar

Antes hay 5 categorías y la columna nombre es UNIQUE. ¿Qué devuelve el SELECT final?

INSERT INTO categorias (id, nombre) VALUES (6, 'Software');
INSERT INTO categorias (id, nombre) VALUES (7, 'Software');
SELECT COUNT(*) FROM categorias;
Pregunta 18Lección 6: Crear y modificar

El pedido 22 tiene 3 líneas. ¿Qué número devuelve el SELECT final?

BEGIN;
DELETE FROM detalle WHERE pedido_id = 22;
ROLLBACK;
SELECT COUNT(*) FROM detalle WHERE pedido_id = 22;
Pregunta 19Lección 7: Índices y rendimiento

Sin el índice, la consulta devuelve 2. ¿Y con él?

CREATE INDEX idx_clientes_pais ON clientes (pais);
SELECT COUNT(*) FROM clientes WHERE pais = 'Chile';
Pregunta 20Lección 7: Índices y rendimiento

¿Qué pasa al ejecutar esto?

CREATE UNIQUE INDEX idx_clientes_ciudad ON clientes (ciudad);
Pregunta 21Lección 7: Índices y rendimiento

Con un índice sobre precio, ¿qué devuelve esta consulta?

CREATE INDEX idx_productos_precio ON productos (precio);
SELECT nombre FROM productos WHERE precio * 2 > 3000;
Pregunta 22Lección 8: Ventanas y SQL desde código

¿Qué devuelve esta consulta?

SELECT nombre,
       ROW_NUMBER() OVER (ORDER BY precio DESC) AS puesto
FROM productos
WHERE categoria_id = 2;
Pregunta 23Lección 8: Ventanas y SQL desde código

¿Qué devuelve esta consulta?

SELECT fecha, SUM(1) OVER (ORDER BY fecha) AS acumulado
FROM pedidos
WHERE cliente_id = 2
ORDER BY fecha;
Pregunta 24Lección 8: Ventanas y SQL desde código

Un programa arma la consulta pegando el email que escribe el usuario, que ha escrito ' OR '1'='1. La consulta final queda así. ¿Qué número devuelve?

SELECT COUNT(*) FROM clientes WHERE email = '' OR '1'='1';

Las preguntas siguen el orden del curso; el enlace de cada explicación lleva a su lección. ¿Quieres comprobar una respuesta? Copia la consulta en el editor de SQL, que tiene cargada la misma base de datos. Y si alguna te sorprendió, puede que esté en las rarezas de SQL.