Curso
Tanto si estás buscando una nueva oportunidad para aplicar tus habilidades en SQL como si eres un hiring manager que va a entrevistar a un candidato, conocer las preguntas y respuestas más comunes en entrevistas de SQL es clave.
En este artículo encontrarás 99 preguntas y respuestas de entrevista sobre SQL para 2026, que cubren los temas clave para ayudarte a prepararte, aprender y contratar con eficacia, entre ellos:
- Conocimientos fundamentales: definiciones claras de RDBMS, claves y dialectos de SQL.
- Dominio técnico: profundización en DDL vs. DML, restricciones e indexación.
- Lógica de consultas: explicaciones de joins, subconsultas y funciones de agregación.
- Aplicación práctica: soluciones de código para casos reales, como encontrar el enésimo valor más alto o eliminar duplicados.
- Preguntas basadas en escenarios: problemas de entrevista sobre acumulados, detección de duplicados, análisis de huecos y más.
Si quieres llevar tu conocimiento y habilidades más lejos, echa un vistazo a nuestros cursos integrales de data engineering, tecnologías cloud y AWS.
Preguntas de entrevista sobre SQL de un vistazo
Las entrevistas de SQL suelen reflejar cómo se aprende realmente el lenguaje.
Al principio, se centra en vocabulario y gramática: saber qué es un join, cómo funciona SELECT y la diferencia entre DDL y DML.
A medida que coges soltura, el foco pasa de "¿puedes escribir una consulta?" a "¿puedes escribir la consulta adecuada?" Empiezas a entender cuándo ayuda un índice, por qué importa la normalización y cómo se comportan bajo el capó comandos sutilmente distintos como DELETE y TRUNCATE.
En perfiles senior, se da por hecha la sintaxis y la prueba real es la resolución de problemas: gestionar duplicados, NULL, empates y lógicas de ranking con funciones de ventana y CTEs, y razonar sobre transacciones, concurrencia y rendimiento.
Para profesionales intermedios
-
Funciones en SQL. Deberías conocer funciones de agregación y escalares, así como funciones incorporadas y definidas por el usuario.
-
Comandos avanzados. Pueden preguntarte por joins, claves primarias y foráneas, índices y relaciones en SQL.
-
Diseño de bases de datos. Espera preguntas sobre normalización, desnormalización y diferencias entre sentencias como
DELETE,TRUNCATEyDROP. -
Consultas avanzadas. Pueden preguntarte por subconsultas anidadas y correlacionadas, y por tareas específicas como encontrar el enésimo valor más alto de una columna.
Preguntas generales de entrevista sobre SQL
Antes de pasar a lo técnico, tu entrevistador puede empezar con preguntas generales sobre tu experiencia con SQL.\
No te preocupes si tu experiencia es limitada: probablemente ya lo habrán visto en tu CV. Si aun así quieren hablar contigo, es que tu perfil encaja. Además, no pasa nada si solo has trabajado con un dialecto de SQL. Todos los dialectos son bastante similares y conocer uno bien es una base sólida para aprender los demás.
1. ¿Qué es SQL?
Significa Structured Query Language y es un lenguaje de programación para interactuar con sistemas de gestión de bases de datos relacionales (RDBMS). Incluye recuperar, actualizar, insertar y eliminar datos de tablas.
2. ¿Qué son los dialectos de SQL? Pon algunos ejemplos.
Las distintas variantes de SQL, tanto gratuitas como de pago, se llaman dialectos de SQL. Todos comparten una sintaxis muy similar y solo difieren ligeramente en funcionalidades adicionales. Algunos ejemplos: Microsoft SQL Server, PostgreSQL, MySQL, SQLite, T-SQL y Oracle.
3. ¿Cuáles son las principales aplicaciones de SQL?
Con SQL podemos:
- crear, eliminar y actualizar tablas en una base de datos
- acceder, manipular y modificar datos de una tabla
- recuperar y resumir la información necesaria de una o varias tablas
- añadir o eliminar filas o columnas concretas de una tabla
Preguntas de entrevista sobre SQL para principiantes
Tu entrevistador puede romper el hielo con preguntas más sencillas:
4. ¿Qué es una sentencia SQL?
También llamada comando SQL. Es una cadena de caracteres que el motor de SQL interpreta como un comando válido y ejecuta en consecuencia. Algunos ejemplos son SELECT, CREATE, DELETE, DROP, REVOKE, etc.
5. ¿Qué es una consulta SQL?
Una consulta es un bloque de código en SQL para acceder o modificar datos de una base de datos.
Hay dos tipos: consultas de recuperación de datos y de modificación de datos. Las primeras sirven para recuperar los datos necesarios (incluye limitar, agrupar, ordenar, extraer de múltiples tablas, etc.), y las segundas para crear, añadir, eliminar, actualizar y renombrar datos.
6. ¿Qué es una subconsulta en SQL?
También llamada consulta interna: una consulta dentro de otra (consulta externa). Puede aparecer en cláusulas como SELECT, FROM, WHERE, UPDATE, etc. También es posible anidar subconsultas. La más interna se ejecuta primero y su resultado se pasa a la consulta contenedora (o subconsulta).
7. ¿Qué es un join en SQL?
Una cláusula para combinar y recuperar registros de dos o más tablas. Las tablas se enlazan según la relación entre sus columnas. Consulta nuestro tutorial de SQL joins para más contexto, y nuestra guía de preguntas de entrevista sobre SQL joins.
8. ¿Qué es un comentario en SQL?
Una aclaración legible para humanos sobre qué hace un fragmento de código. Pueden ser de una línea (precedidos por --) o de varias líneas (/*comment_text*/). El motor de SQL los ignora al ejecutar. Su objetivo es facilitar la lectura del código a futuro.
9. ¿Qué es un alias en SQL?
Un nombre temporal para una tabla (o columna) al ejecutar una consulta. Se usa para mejorar la legibilidad y hacer el código más compacto. Se introduce con la palabra clave AS:
SELECT col_1 AS column
FROM table_name;
Preguntas técnicas de entrevista sobre SQL
Ahora, pasemos a las preguntas técnicas de SQL y posibles respuestas.
Al responder, lo mejor es ser preciso y directo. Respuestas vagas pueden parecer desvíos y provocar repreguntas sobre temas en los que tengas menos confianza.
En definitiva, SQL permite consultar una base de datos de múltiples formas y se integra fácilmente con lenguajes como Python o R, para aprovechar su potencia combinada.
10. ¿Qué tipos de comandos SQL conoces?
- Data Definition Language (DDL) – definir y modificar la estructura de una base de datos.
- Data Manipulation Language (DML) – acceder, manipular y modificar datos en una base de datos.
- Data Control Language (DCL) – controlar el acceso de usuarios a los datos y otorgar o revocar privilegios.
- Transaction Control Language (TCL) – controlar transacciones en una base de datos.
- Data Query Language (DQL) – realizar consultas para recuperar la información necesaria.
11. Pon algunos ejemplos de comandos SQL comunes.
-
DDL:
CREATE,ALTERTABLE,DROP,TRUNCATEyADD COLUMN -
DML:
UPDATE,DELETEyINSERT -
DCL:
GRANTyREVOKE -
TCL:
COMMIT,SET TRANSACTION,ROLLBACKySAVEPOINT -
DQL: –
SELECT
12. ¿Qué es un DBMS y qué tipos conoces?
Database Management System: paquete de software para realizar operaciones sobre los datos almacenados en una base, como acceder, actualizar, transformar, insertar y eliminar. Hay varios tipos: relacional, jerárquico, de red, de grafos u orientado a objetos, según cómo se organizan y almacenan los datos.
13. ¿Qué es un RDBMS? Pon ejemplos.
Relational Database Management System. Es el tipo más común para trabajar con datos guardados en varias tablas relacionadas mediante claves compartidas. SQL está diseñado para interactuar con RDBMS. Ejemplos: MySQL, PostgreSQL, Oracle, MariaDB, etc.
14. ¿Qué son tablas y campos en SQL?
Una tabla es un conjunto organizado de datos relacionados en forma tabular (filas y columnas). Un campo es otro término para una columna.
15. ¿Qué tipos de subconsultas en SQL conoces?
- De una sola fila – devuelve como mucho una fila.
- Multifila – devuelve al menos dos filas.
- Multicolumna – devuelve al menos dos columnas.
- Correlacionada – se relaciona con información de la consulta externa.
- Anidada – una subconsulta dentro de otra.
16. ¿Qué es una restricción y por qué usarla?
Un conjunto de condiciones que define qué tipo de datos se pueden introducir en cada columna. Garantizan la integridad de los datos y evitan acciones no deseadas.
17. ¿Qué restricciones SQL conoces?
-
DEFAULT– proporciona un valor por defecto para una columna. -
UNIQUE– solo permite valores únicos. -
NOT NULL– no permite valores nulos. -
PRIMARY KEY– exige valores únicos y no nulos (NOT NULLyUNIQUE). -
FOREIGN KEY– establece claves compartidas entre dos o más tablas.
18. ¿Qué tipos de joins conoces?
-
(INNER) JOIN– devuelve solo los registros que cumplen la condición de join en ambas (o todas) las tablas. Es el join por defecto. -
LEFT (OUTER) JOIN– devuelve todos los registros de la tabla izquierda y los que cumplan la condición en la derecha. -
RIGHT (OUTER) JOIN– devuelve todos los registros de la tabla derecha y los que cumplan la condición en la izquierda. -
FULL (OUTER) JOIN– devuelve todos los registros de ambas (o todas) las tablas. Puede verse como la combinación de left y right join.
Nota: FULL OUTER JOIN está soportado por PostgreSQL, SQL Server, Oracle y MySQL 8.0 o superior, pero en MySQL solo se permite mediante patrones con UNION; por su parte, SQLite no soporta RIGHT JOIN, que puede emularse con LEFT JOIN en combinación con UNION.
19. ¿Qué es una clave primaria en SQL?
Una columna (o conjunto de columnas) a la que se le impone la restricción PRIMARY KEY para garantizar valores únicos y no nulos. En otras palabras, una clave primaria combina NOT NULL y UNIQUE. La clave primaria identifica de forma única cada registro de la tabla.
Concepto relacionado — Clave sustituta (surrogate key): es un identificador generado artificialmente (normalmente un entero secuencial o UUID) asignado a cada registro, independiente de los valores de negocio. A diferencia de las claves naturales (p. ej., un email), las sustitutas permanecen estables cuando cambian los datos de negocio, por lo que son habituales como claves primarias en producción.
Cada tabla puede definir como mucho una PRIMARY KEY (que puede ser compuesta). Una PRIMARY KEY se recomienda encarecidamente, aunque no todos los motores la exigen.
20. ¿Qué es una clave única (unique key) en SQL?
Una columna (o conjunto de columnas) con la restricción UNIQUE para garantizar valores únicos en esa columna, permitiendo un posible NULL (único).
Nota:
- SQL Server: solo permite un
NULLsalvo que uses un índice filtrado. - PostgreSQL / Oracle / MySQL: permiten múltiples
NULLs porqueNULL <> NULL.
21. ¿Qué es una clave foránea (foreign key) en SQL?
Una columna (o conjunto de columnas) con la restricción FOREIGN KEY (o clave UNIQUE) para enlazarla con la clave primaria de otra tabla (o varias). El objetivo de las claves foráneas es mantener conectadas las distintas tablas de una base.
22. ¿Qué es un índice en SQL?
Una estructura de datos especial asociada a una tabla para almacenar partes relevantes y acelerar la búsqueda y recuperación. Son especialmente eficaces en bases de datos grandes, donde mejoran notablemente el rendimiento.
23. ¿Qué tipos de índices conoces?
- Índice único – no permite duplicados en una columna y ayuda a mantener la integridad de datos.
- Índice agrupado (clustered) – define el orden físico de los registros y busca por valores clave. Una tabla solo puede tener uno.
- Índice no agrupado (non-clustered) – mantiene un orden lógico distinto al físico en disco. Los datos se almacenan en un sitio y el índice en otro. Una tabla puede tener varios.
24. ¿Qué es un esquema?
Una colección de elementos estructurales de base de datos como tablas, procedimientos almacenados, índices, funciones y triggers. Muestra la arquitectura general, especifica las relaciones entre objetos y define permisos de acceso. Lee nuestra guía sobre esquemas para profundizar.
25. ¿Qué es un operador SQL?
Un carácter reservado, combinación de caracteres o palabra clave usada en consultas para realizar una operación concreta. Se usan a menudo con la cláusula WHERE para fijar condiciones de filtrado.
26. ¿Qué tipos de operadores SQL conoces?
-
Aritméticos (
+,-,*,/, etc.) -
Comparación (
>,<,=,>=, etc.) -
Compuestos (
+=,-=,*=,/=, etc.) -
Lógicos (
AND,OR,NOT,BETWEEN, etc.) -
De cadenas (
%,_,+,^, etc.) -
De conjuntos (
UNION,UNION ALL,INTERSECTyMINUS(oEXCEPT))
27. ¿Qué es una cláusula?
Una condición impuesta a una consulta para filtrar los datos y obtener el resultado deseado. Ejemplos: WHERE, LIMIT, HAVING, LIKE, AND, OR, ORDER BY, etc.
28. ¿Qué sentencias comunes se usan con SELECT?
Las más comunes: FROM, GROUP BY, JOIN, WHERE, ORDER BY, LIMIT y HAVING.
29. ¿Cómo creas una tabla en SQL?
Con la sentencia CREATE TABLE. Por ejemplo, para una tabla con tres columnas de tipos predefinidos:
CREATE TABLE table_name (col_1 datatype,
col_2 datatype,
col_3 datatype);
30. ¿Cómo actualizas una tabla?
Con UPDATE. Sintaxis:
UPDATE table_name
SET col_1 = value_1, col_2 = value_2
WHERE condition;
31. ¿Cómo eliminas una tabla de una base de datos?
Con DROP TABLE. Sintaxis: DROP TABLE table_name;.
32. ¿Cómo obtienes el recuento de registros de una tabla?
Con la función de agregación COUNT() con asterisco: SELECT COUNT(*) FROM table_name;.
33. ¿Cómo ordenas registros en una tabla?
Con ORDER BY:
SELECT * FROM table_name
ORDER BY col_1;
Puedes especificar orden descendente con DESC; por defecto es ascendente. También puedes ordenar por varias columnas y fijar el orden para cada una. Ejemplo:
SELECT * FROM table_name
ORDER BY col_1 DESC, col_3, col_6 DESC;
34. ¿Cómo seleccionas todas las columnas de una tabla?
Usando el asterisco * con SELECT: SELECT * FROM table_name;.
35. ¿Cómo seleccionas registros comunes de dos tablas?
Con INTERSECT:
SELECT col1, col2 FROM table_1
INTERSECT
SELECT col1, col2 FROM table_2;
Nota: INTERSECT requiere el mismo número de columnas y tipos compatibles.
36. ¿Qué es DISTINCT y cómo se usa?
Se usa con SELECT para eliminar duplicados y devolver valores únicos de una columna. Sintaxis:
SELECT DISTINCT col_1
FROM table_name;
37. ¿Qué son las relaciones? Pon ejemplos.
Son conexiones o correlaciones entre entidades; básicamente, cómo dos o más tablas se relacionan. Por ejemplo, el mismo ID de cliente aparece en una tabla de ventas y en la tabla de clientes.
38. ¿Qué es un valor NULL? ¿En qué se diferencia de cero o una cadena vacía?
Un NULL indica ausencia de datos en una celda. En cambio, cero es un valor numérico válido y una cadena vacía es una cadena legal de longitud cero.
39. ¿Cuál es la diferencia entre SQL y NoSQL?
Las bases SQL son relacionales, estructuradas y usan tablas con esquemas predefinidos; las NoSQL son no relacionales, sin esquema y diseñadas para datos no estructurados o semiestructurados.
40. ¿Qué retos comunes hay al trabajar con bases SQL?
Optimización de rendimiento en grandes volúmenes, gestión de estrategias de indexación, garantizar integridad con restricciones, manejar transacciones concurrentes y optimizar la ejecución de consultas.
Preguntas de entrevista de SQL intermedio
41. ¿Qué es una Common Table Expression (CTE)?
Una Common Table Expression (CTE) es un conjunto temporal con nombre al que puedes hacer referencia dentro de una sentencia SELECT, INSERT, UPDATE o DELETE. Mejoran la legibilidad y permiten dividir consultas complejas en partes más simples y reutilizables. La sintaxis usa la palabra clave WITH:
WITH sales_summary AS (
SELECT product_id, SUM(amount) AS total_sales
FROM sales
GROUP BY product_id
)
SELECT p.product_name, s.total_sales
FROM products p
JOIN sales_summary s ON p.id = s.product_id
WHERE s.total_sales > 10000;
Son especialmente útiles para consultas recursivas (datos jerárquicos como organigramas) y cuando necesitas referenciar la misma subconsulta varias veces.
42. ¿Qué son las funciones de ventana y en qué se diferencian de las de agregación?
Las funciones de ventana calculan sobre un conjunto de filas relacionado con la fila actual sin colapsar el resultado a una sola fila, como hacen las agregaciones. Usan la cláusula OVER() para definir la ventana.
Funciones clave de ventana:
ROW_NUMBER()– asigna un número secuencial único a cada filaRANK()– asigna rango con huecos en empatesDENSE_RANK()– asigna rango sin huecos en empatesLAG()/LEAD()– acceden a datos de filas previa/siguienteSUM() OVER(),AVG() OVER()– cálculos acumulados
Ejemplo: calcular total acumulado de ventas
SELECT
order_date,
amount,
SUM(amount) OVER (ORDER BY order_date) AS running_total
FROM orders;
43. ¿Diferencia entre RANK(), DENSE_RANK() y ROW_NUMBER()?
Las tres ranquean, pero gestionan empates distinto:
ROW_NUMBER()– siempre asigna números únicos (1, 2, 3, 4...)RANK()– mismo rango en empates y salta números (1, 2, 2, 4...)DENSE_RANK()– mismo rango en empates sin saltos (1, 2, 2, 3...)
SELECT
name,
score,
ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num,
RANK() OVER (ORDER BY score DESC) AS rank,
DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM students;
Usa DENSE_RANK() para el "enésimo" valor donde los empates comparten posición.
En esta sección repasamos las preguntas intermedias más populares para que sepas qué esperar.
44. ¿Qué es una función en SQL?
Un objeto de base de datos que agrupa sentencias SQL para una tarea frecuente. Recibe parámetros de entrada, realiza cálculos o transformaciones y devuelve un resultado. Mejoran la legibilidad y evitan repetir código.
45. ¿Qué tipos de funciones SQL conoces?
- Funciones de agregación – operan sobre múltiples registros (normalmente agrupados) y devuelven un único valor (por grupo).
- Funciones escalares – operan sobre cada valor individual y devuelven un único valor.
A su vez, pueden ser incorporadas (del sistema) o definidas por el usuario.
46. ¿Qué funciones de agregación SQL conoces?
-
AVG()– media -
SUM()– suma -
MIN()– mínimo -
MAX()– máximo -
COUNT()– cuenta filas, incluidas con valores nulos
47. ¿Qué funciones escalares SQL conoces?
-
LEN()(en otros dialectos –LENGTH()) – longitud de una cadena, incluidos espacios -
UCASE()(en otros dialectos –UPPER()) – a mayúsculas -
LCASE()(en otros dialectos –LOWER()) – a minúsculas -
INITCAP() – a formato título (cada palabra con mayúscula inicial) -
MID()(en otros dialectos –SUBSTR()) – extrae una subcadena -
ROUND()– redondea a decimales especificados -
NOW()– fecha y hora actuales
48. ¿Qué son las funciones de cambio de mayúsculas/minúsculas en SQL?
Son un subconjunto de funciones de caracteres y sirven para cambiar el caso del texto: a mayúsculas, minúsculas o formato título.
-
UCASE()(en otros dialectos –UPPER()) – a mayúsculas -
LCASE()(en otros dialectos –LOWER()) – a minúsculas -
INITCAP()– a formato título
49. ¿Qué son las funciones de manipulación de caracteres en SQL?
Son un subconjunto de funciones de caracteres y se usan para modificar texto.
-
CONCAT()– une dos o más cadenas -
SUBSTRING()/SUBSTR()– devuelve parte de una cadena según posición inicial y final -
LENGTH()(en otros dialectos –LEN()) – longitud, incluidos espacios -
REPLACE()– reemplaza todas las ocurrencias de un substring -
INSTR()– posición numérica de un substring -
LPAD()yRPAD()– relleno a izquierda/derecha -
TRIM()– elimina caracteres definidos y espacios de inicio, fin o ambos
50. ¿Diferencia entre variables locales y globales?
Las locales solo se acceden dentro de la función donde se declaran. Las globales, declaradas fuera, se almacenan en estructuras fijas y pueden usarse en todo el programa.
51. ¿Diferencia entre SQL y PL/SQL?
SQL es el lenguaje estándar para consultar y gestionar bases de datos relacionales, centrado en la manipulación y recuperación de datos. PL/SQL (Procedural Language/SQL) es una extensión de SQL usada en Oracle que incluye construcciones procedimentales como bucles, condiciones y manejo de excepciones, lo que permite implementar lógica de negocio compleja dentro de la base de datos. Tenemos otro artículo con las Top 20 PL/SQL Interview Questions and Answers, una buena revisión si sabes que te preguntarán sobre Oracle.
52. ¿Diferencia entre LEFT JOIN y LEFT OUTER JOIN?
No hay diferencia entre LEFT JOIN y LEFT OUTER JOIN. Son intercambiables. SQL permite que OUTER sea opcional, así que LEFT JOIN es una abreviatura de LEFT OUTER JOIN. Ambos devuelven todos los registros de la tabla izquierda y los coincidentes de la derecha.
53. ¿Qué es la indexación en SQL y cómo mejora el rendimiento?
La indexación crea una estructura de datos especial que acelera la recuperación permitiendo localizar filas de forma más eficiente. Funciona como una tabla de búsqueda optimizada, reduciendo escaneos completos. Sin embargo, un exceso de índices puede ralentizar inserciones, actualizaciones y borrados por el mantenimiento del índice.
54. ¿Qué es un procedimiento almacenado y en qué se diferencia de una función?
Un procedimiento almacenado es un conjunto precompilado de sentencias SQL que se ejecutan como una unidad para realizar una tarea. Pueden modificar datos o objetos de esquema, gestionar transacciones y devolver cero o más conjuntos de resultados. Las funciones, por su parte, suelen usarse en expresiones SQL, deben devolver un valor (escalar o tabla) y en muchas bases están restringidas de efectos colaterales. El comportamiento exacto varía (p. ej., T-SQL tiene funciones escalares y con valor de tabla; PostgreSQL distingue entre funciones y procedimientos).
55. ¿Cuál es el orden por defecto con ORDER BY y cómo lo cambias?
Por defecto es ascendente (NULLS FIRST/LAST depende de la BD). Usa ASC/DESC por columna así:
SELECT * FROM table_name
ORDER BY col_1 DESC;
56. ¿Qué son los operadores de conjuntos en SQL?
-
UNION– devuelve los registros obtenidos por al menos una de dos consultas (sin duplicados) -
UNION ALL– devuelve los registros de al menos una de dos consultas (con duplicados) -
INTERSECT– devuelve los registros en común -
EXCEPT(llamadoMINUSen MySQL y Oracle) – devuelve los registros de la primera consulta que no están en la segunda
57. ¿Qué operador se usa para patrones (pattern matching)?
El operador LIKE con comodines % y _. % representa cualquier número de caracteres (incluido cero) y _ exactamente uno.
58. ¿Diferencia entre clave primaria y clave única en SQL?
Ambas garantizan unicidad en una columna; la primaria identifica unívocamente cada registro de la tabla y la única evita duplicados en esa columna.
59. ¿Qué es una clave primaria compuesta?
Una clave primaria basada en múltiples columnas.
60. ¿Orden típico de cláusulas en una SELECT?
SELECT – FROM – JOIN – ON – WHERE – GROUP BY – HAVING – ORDER BY – LIMIT
61. ¿En qué orden ejecuta el intérprete las partes de una SELECT?
Aquí tienes el orden de ejecución:
FROM → ON → JOIN → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT/OFFSET (FETCH)
62. ¿Qué es una vista en SQL?
Una tabla virtual que contiene un subconjunto de datos recuperados de una o más tablas (u otras vistas). Las vistas estándar no almacenan datos; las vistas materializadas sí. Las vistas simplifican consultas, encapsulan lógica y, combinadas con privilegios, restringen columnas/filas. Pueden unir/agregar datos de múltiples tablas.
63. ¿Podemos crear una vista basada en otra vista?
Sí. Se conocen como vistas anidadas. Aun así, conviene no anidar demasiadas, porque complica la lectura y depuración.
64. ¿Se puede usar una vista si se elimina la tabla original?
No. Las vistas basadas en esa tabla quedan inválidas. Si intentamos usarlas, obtendremos un error.
65. ¿Qué tipos de relaciones SQL conoces?
- Uno a uno – cada registro en una tabla corresponde a uno en otra
- Uno a muchos – un registro en una tabla corresponde a varios en otra
- Muchos a muchos – registros en ambas tablas se relacionan con varios en la otra
66. ¿Qué valores puede tener un campo BOOLEAN?
En algunos dialectos como PostgreSQL, el tipo BOOLEAN existe explícitamente y toma TRUE, FALSE o NULL. En otros, como SQL Server, se usa BIT para almacenar 1 (true) o 0 (false).
67. ¿Qué es la normalización en SQL?
Un proceso de diseño que organiza y reestructura datos para reducir redundancia, dependencia, duplicidad e inconsistencias. Mejora la integridad, suele aumentar el número de tablas, facilita el acceso y control de seguridad y brinda más flexibilidad de consulta.
68. ¿Qué es la desnormalización en SQL?
Desnormalizar es lo opuesto: introduce redundancia y combina datos de varias tablas. Optimiza el rendimiento cuando las lecturas son más importantes que las escrituras, al evitar joins complejos y reducir el tiempo de ejecución.
69. ¿Diferencia entre renombrar una columna y darle un alias?
Renombrar cambia el nombre real en la tabla de forma permanente. Un alias es un nombre temporal al ejecutar una consulta, para hacer el código más legible y compacto.
70. ¿Diferencia entre subconsultas anidadas y correlacionadas?
Una subconsulta correlacionada es interna y hace referencia a valores de la consulta externa para ejecutarse; depende de ella. Una no correlacionada no depende de la externa y puede ejecutarse por sí misma.
71. ¿Diferencia entre índices clustered y non-clustered?
Un índice clustered define el orden físico de los registros y busca por valores clave; uno non-clustered mantiene un orden lógico distinto al físico en disco. Solo puede haber un clustered, pero muchos non-clustered.
72. ¿Qué es la función CASE()?
La forma de implementar lógica if-then-else en SQL. Evalúa condiciones en WHEN y devuelve el valor del THEN correspondiente a la primera que se cumpla; si ninguna se cumple, devuelve el de ELSE si existe, o NULL. Sintaxis:
CASE
WHEN condition_1 THEN value_1
WHEN condition_2 THEN value_2
WHEN condition_3 THEN value_3
...
ELSE value
END;
73. ¿Diferencia entre DELETE y TRUNCATE?
DELETE es DML y elimina una o más filas según la condición en WHERE. Es reversible solo si está dentro de una transacción (vía ROLLBACK).
TRUNCATE es DDL y elimina todas las filas desalojando páginas. Es más rápido pero generalmente irreversible, y no puede usarse en tablas referenciadas por una clave foránea.
74. ¿Diferencia entre DROP y TRUNCATE?
DROP elimina por completo la tabla de la base, incluida su estructura y todas las restricciones, relaciones y privilegios. TRUNCATE elimina todas las filas sin afectar a la estructura ni restricciones. Ambos son DDL. DROP elimina la tabla y su metadato; TRUNCATE borra las filas pero conserva la definición. El rendimiento y la transaccionalidad dependen del motor.
75. ¿Diferencia entre HAVING y WHERE?
HAVING opera sobre datos agregados tras el agrupado; WHERE evalúa cada fila individualmente. Si ambas aparecen, el orden es:WHERE – GROUP BY – HAVING. El motor las interpreta en ese orden.
76. ¿Cómo añades un registro a una tabla?
Con INSERT INTO y VALUES. Sintaxis:
INSERT INTO table_name
VALUES (value_1, value_2, ...);
77. ¿Cómo eliminas un registro de una tabla?
Con DELETE. Sintaxis:
DELETE FROM table_name
WHERE condition;
Así también puedes borrar múltiples registros si cumplen la condición.
78. ¿Cómo añades una columna a una tabla?
Con ALTER TABLE y ADD. Sintaxis:
ALTER TABLE table_name
ADD column_name datatype;
79. ¿Cómo renombras una columna?
Con ALTER TABLE y RENAME COLUMN ... TO .... Sintaxis:
ALTER TABLE table_name
RENAME COLUMN old_column_name TO new_column_name;
80. ¿Cómo eliminas una columna?
Con ALTER TABLE y DROP COLUMN. Sintaxis:
ALTER TABLE table_name
DROP COLUMN column_name;
81. ¿Cómo seleccionas solo filas pares o impares?
Comprobando el resto de dividir entre 2. En PostgreSQL/MySQL usamos MOD; en SQL Server/SQLite, el operador %. Para pares con MOD:
SELECT * FROM table_name
WHERE MOD(ID_column, 2) = 0;
Para pares con %:
SELECT * FROM table_name
WHERE ID_column % 2 = 0;
Para impares, usa <> en lugar de =.
82. ¿Cómo evitas duplicados al consultar?
Usando DISTINCT con SELECT o creando una clave única en esa tabla.
83. ¿Cómo insertas varias filas a la vez?
Con INSERT INTO y VALUES. Sintaxis:
INSERT INTO table_name
VALUES (value_1, value_2, ...),
(value_3, value_4, ...),
(value_5, value_6, ...),
...;
84. ¿Cómo encuentras el enésimo valor más alto de una columna?
Usando funciones de ventana para gestionar empates correctamente:
SELECT column_name
FROM (
SELECT column_name, DENSE_RANK() OVER (ORDER BY column_name DESC) AS rnk
FROM table_name
) t
WHERE rnk = :n;
Para la enésima fila por orden (ignorando empates): ORDER BY column_name DESC OFFSET n-1 ROWS FETCH NEXT 1 ROW ONLY.
85. ¿Cómo encuentras valores de texto que empiezan por una letra?
Con LIKE y comodines % y _. Por ejemplo, apellidos que empiezan por "A":
SELECT * FROM table_name
WHERE surname LIKE 'A_';
Si admitimos que el apellido pueda ser solo A, la consulta sería:
SELECT * FROM table_name
WHERE surname LIKE 'A%';
86. ¿Cómo encuentras el último id de una tabla?
La forma más simple es usar la función de agregación MAX().
SELECT MAX(id) AS highest_id
FROM table_name;
Usando ORDER BY con LIMIT o TOP
SELECT id
FROM table_name
ORDER BY id DESC
LIMIT 1;
87. ¿Cómo seleccionas filas aleatorias?
Con RAND() junto con ORDER BY y LIMIT. En PostgreSQL se llama RANDOM(). Por ejemplo, cinco filas aleatorias en MySQL:
SELECT * FROM table_name
ORDER BY RAND()
LIMIT 5;
Preguntas de entrevista sobre SQL basadas en escenarios
Estas preguntas evalúan tu capacidad para resolver problemas reales de negocio con SQL. No solo miden sintaxis, sino tu enfoque de resolución y cómo gestionas casos límite como duplicados, NULL y empates.
88. ¿Cómo encuentras y eliminas registros duplicados?
Encontrar duplicados:
SELECT email, COUNT(*) AS duplicate_count
FROM users
GROUP BY email
HAVING COUNT(*) > 1;
Eliminar duplicados (manteniendo uno):
WITH duplicates AS (
SELECT id,
ROW_NUMBER() OVER (PARTITION BY email ORDER BY id) AS rn
FROM users
)
DELETE FROM users
WHERE id IN (SELECT id FROM duplicates WHERE rn > 1);
Este enfoque usa una CTE con ROW_NUMBER() para identificar duplicados, conservando el registro con el id más bajo.
89. ¿Cómo calculas un total acumulado?
Usa la función de ventana SUM() con ORDER BY:
SELECT
transaction_date,
amount,
SUM(amount) OVER (ORDER BY transaction_date) AS running_total
FROM transactions;
Para acumulado por categoría (p. ej., por cliente):
SELECT
customer_id,
transaction_date,
amount,
SUM(amount) OVER (
PARTITION BY customer_id
ORDER BY transaction_date
) AS customer_running_total
FROM transactions;
90. ¿Cómo encuentras empleados que ganan más que la media de su departamento?
Clásico caso de subconsulta correlacionada:
SELECT e.name, e.department, e.salary
FROM employees e
WHERE e.salary > (
SELECT AVG(salary)
FROM employees
WHERE department = e.department
);
Alternativa con función de ventana:
SELECT name, department, salary
FROM (
SELECT
name,
department,
salary,
AVG(salary) OVER (PARTITION BY department) AS dept_avg
FROM employees
) t
WHERE salary > dept_avg;
91. ¿Cómo detectas huecos en una secuencia (p. ej., números de factura que faltan)?
Usa LEAD() para comparar cada valor con el siguiente:
SELECT
invoice_number,
LEAD(invoice_number) OVER (ORDER BY invoice_number) AS next_invoice,
LEAD(invoice_number) OVER (ORDER BY invoice_number) - invoice_number - 1 AS gap_size
FROM invoices
WHERE LEAD(invoice_number) OVER (ORDER BY invoice_number) - invoice_number > 1;
Identifica donde el salto entre consecutivos es mayor que 1.
92. ¿Cómo encuentras clientes con compras en meses consecutivos?
Usa LAG() para comparar con la fila anterior:
WITH monthly_purchases AS (
SELECT
customer_id,
DATE_TRUNC('month', purchase_date) AS purchase_month,
LAG(DATE_TRUNC('month', purchase_date)) OVER (
PARTITION BY customer_id
ORDER BY DATE_TRUNC('month', purchase_date)
) AS prev_month
FROM purchases
GROUP BY customer_id, DATE_TRUNC('month', purchase_date)
)
SELECT DISTINCT customer_id
FROM monthly_purchases
WHERE purchase_month = prev_month + INTERVAL '1 month';
93. ¿Cómo pivotas datos de filas a columnas?
Usa agregación condicional con CASE:
SELECT
product_name,
SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 1 THEN amount ELSE 0 END) AS jan_sales,
SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 2 THEN amount ELSE 0 END) AS feb_sales,
SUM(CASE WHEN EXTRACT(MONTH FROM sale_date) = 3 THEN amount ELSE 0 END) AS mar_sales
FROM sales
GROUP BY product_name;
Algunas bases (SQL Server, Oracle) tienen sintaxis nativa PIVOT.
94. ¿Cómo encuentras los 3 productos con más ventas en cada categoría?
Usa DENSE_RANK() con PARTITION BY:
WITH ranked_products AS (
SELECT
category,
product_name,
SUM(sales_amount) AS total_sales,
DENSE_RANK() OVER (
PARTITION BY category
ORDER BY SUM(sales_amount) DESC
) AS sales_rank
FROM sales
GROUP BY category, product_name
)
SELECT category, product_name, total_sales
FROM ranked_products
WHERE sales_rank <= 3
ORDER BY category, sales_rank;
95. ¿Qué son las propiedades ACID en transacciones?
ACID agrupa cuatro propiedades que garantizan transacciones fiables:
- Atomicidad: todo o nada: o todas las operaciones se completan, o ninguna
- Consistencia: la transacción lleva la base de un estado válido a otro manteniendo reglas y restricciones
- Aislamiento: transacciones concurrentes no interfieren; cada una ve un estado consistente
- Durabilidad: una vez hecho commit, los cambios persisten incluso tras fallos
Ejemplo de transacción:
BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;
96. ¿Qué es un deadlock y cómo prevenirlo?
Un interbloqueo ocurre cuando dos o más transacciones esperan mutuamente la liberación de bloqueos, creando una dependencia circular.
Escenario: la transacción A bloquea la tabla X y espera la Y, mientras la B bloquea Y y espera X.
Estrategias de prevención:
- Orden consistente de bloqueos: adquirir bloqueos siempre en el mismo orden
- Transacciones cortas: confirma o revierte cuanto antes
- Niveles de aislamiento adecuados: niveles más bajos reducen la contención
- Accede solo a lo necesario: evita bloquear filas innecesarias
- Reintentos: la mayoría de BDs detectan y resuelven interbloqueos revirtiendo una transacción
97. ¿Cómo optimizas una consulta lenta?
Estrategias clave:
-
Añade índices adecuados: en columnas usadas en
WHERE,JOINyORDER BY -
Analiza planes de ejecución:
EXPLAIN(PostgreSQL/MySQL) oEXPLAIN PLAN(Oracle) -
Evita SELECT *: recupera solo lo necesario
-
Usa JOIN en vez de subconsultas: a menudo son más eficientes que las correlacionadas
-
Limita resultados:
LIMIT/TOPsi no necesitas todas las filas -
Evita funciones sobre columnas indexadas:
WHERE YEAR(date_col) = 2026no usa índice; usaWHERE date_col >= '2026-01-01' -
Valora particionar: en tablas muy grandes, por fecha o categoría
98. ¿Cómo manejas valores NULL en cálculos y comparaciones?
NULL representa datos faltantes o desconocidos y requiere trato especial:
-
Comparaciones: usa
IS NULLoIS NOT NULLen lugar de= NULL -
COALESCE(): devuelve el primer valor no
NULL:COALESCE(column, 'default') -
NULLIF(): devuelve
NULLsi dos valores son iguales:NULLIF(a, b) -
ISNULL() / NVL(): funciones específicas por base para reemplazar
NULL
SELECT
name,
COALESCE(phone, email, 'No contact') AS contact_info,
CASE WHEN status IS NULL THEN 'Unknown' ELSE status END AS status
FROM customers;
99. ¿Cómo encuentras la racha más larga de días de login consecutivos de un usuario?
Es un problema avanzado de "islas y huecos":
WITH login_groups AS (
SELECT
user_id,
login_date,
login_date - ROW_NUMBER() OVER (
PARTITION BY user_id
ORDER BY login_date
) * INTERVAL '1 day' AS group_id
FROM user_logins
)
SELECT
user_id,
MIN(login_date) AS streak_start,
MAX(login_date) AS streak_end,
COUNT(*) AS streak_length
FROM login_groups
GROUP BY user_id, group_id
ORDER BY streak_length DESC
LIMIT 1;
El truco es restar un número de fila a cada fecha: las fechas consecutivas producen el mismo "group_id".
Forma a tu equipo en SQL
Prepararte para entrevistas de SQL es importante para candidatos y responsables de contratación, pero para las empresas también lo es invertir en formación continua en SQL para sus equipos. Trabajar con datos es más importante que nunca, y lograr que tu equipo domine SQL puede marcar la diferencia en los resultados de tu compañía.
Si lideras un equipo y quieres que todos dominen SQL, DataCamp for Business ofrece programas de formación a medida, desde los básicos hasta conceptos avanzados. Podemos ofrecerte:
- Itinerarios de aprendizaje dirigidos: personalizables al nivel y necesidades de tu equipo.
- Práctica aplicada: ejercicios y escenarios reales que refuerzan el aprendizaje y la retención.
- Seguimiento del progreso: herramientas para monitorizar y evaluar el avance y el logro de objetivos.
Invertir en formación en SQL con plataformas como DataCamp no solo potencia las capacidades de tu equipo, sino que te da una ventaja estratégica para mantenerte competitivo y ofrecer resultados. Habla con nuestro equipo y solicita una demo hoy.
Conclusión
En resumen, hemos repasado 99 preguntas esenciales de SQL para niveles inicial, intermedio y basadas en escenarios, junto con sus respuestas. Esperamos que te ayuden a prepararte y a ganar confianza, tanto si buscas un puesto trabajando con SQL como si estás contratando perfiles intermedios.
Si necesitas más práctica para llegar a la entrevista con garantías, explora nuestro listado completo de cursos de SQL:
Aumenta la competencia SQL de tu equipo
Forma a tu equipo en SQL con DataCamp para empresas. Formación completa, proyectos prácticos y métricas de rendimiento detalladas para tu organización.

FAQs
¿Cómo puedo empezar a aprender SQL?
Para empezar con SQL, primero entiende los conceptos de bases de datos y los sistemas relacionales. En DataCamp tienes muchos recursos, como el curso Introduction to SQL, el Data Analyst in SQL Career Track y la chuleta de SQL. También puedes visitar la página de cursos de SQL para ver todos los recursos.
¿Dónde puedo encontrar problemas de SQL del mundo real para practicar?
En la plataforma de DataCamp hay muchos proyectos de SQL para practicar tus habilidades, aptos para todos los niveles.
¿Cuáles son algunas preguntas comunes de entrevista de SQL para principiantes?
A los principiantes suelen pedirles que expliquen conceptos básicos de SQL, como la diferencia entre las sentencias SELECT e INSERT, el propósito de las claves en una base (primarias y foráneas) y consultas sencillas para obtener datos de una sola tabla usando condiciones (cláusula WHERE).
¿Cuáles son preguntas comunes de entrevista de SQL para perfiles intermedios?
A los perfiles intermedios pueden preguntarles conceptos más complejos como joins (INNER, LEFT, RIGHT, FULL), subconsultas, agregaciones y agrupaciones (GROUP BY) y el uso de operaciones de conjuntos como UNION, INTERSECT y EXCEPT. También pueden pedir que optimices consultas para rendimiento.
¿Cómo debo prepararme para una entrevista de SQL?
Para prepararte para una entrevista de SQL deberías:
- Repasar conceptos básicos y avanzados de SQL.
- Practicar la escritura de consultas para problemas comunes.
- Entender el diseño de bases de datos y la normalización.
- Familiarizarte con el dialecto de SQL que usa la empresa (por ejemplo, PostgreSQL, MySQL, SQL Server).
- Resolver preguntas y ejercicios de entrevista disponibles en línea.
¿Qué puedo esperar en una entrevista técnica de SQL y cómo demostrar mejor mis habilidades?
En una entrevista técnica de SQL puedes esperar preguntas sobre sintaxis, diseño de bases, optimización de consultas y tu capacidad de resolver problemas con SQL. Para demostrar tus habilidades:
- Practica explicar tu razonamiento al resolver problemas en SQL.
- Prepárate para escribir consultas sin errores en pizarra o en un entorno online.
- Muestra tu comprensión de joins, subconsultas y transacciones con ejemplos.
- Comenta experiencias reales con bases de datos, destacando retos y optimizaciones que hayas implementado.
¿Es importante aprender dialectos específicos de SQL y en cuáles debería centrarme?
Aunque la sintaxis básica de SQL es consistente entre RDBMS, cada sistema (MySQL, PostgreSQL, SQL Server, Oracle) tiene su dialecto con funciones propias. Aprender un dialecto concreto es importante si apuntas a roles que usan un RDBMS específico. Enfócate en el dialecto más relevante para tus objetivos o el más común en tu sector. Una base sólida en SQL estándar facilita adaptarte a otros dialectos.
¿DataCamp tiene recursos GRATUITOS extra para preparar entrevistas de SQL?
¡Sí! Si actualmente eres profesor universitario o estudiante, puedes usar DataCamp Classrooms para acceder GRATIS a todo nuestro catálogo premium. Incluye nuestros itinerarios y certificaciones de SQL.
También puedes consultar nuestra chuleta gratuita SQL Basics.
¿Cuáles son los temas de SQL más importantes para estudiar en entrevistas en 2026?
Prioriza estas áreas: (1) Joins y subconsultas: entiende INNER, LEFT, RIGHT y FULL, además de correlacionadas vs. no correlacionadas; (2) Funciones de ventana: ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD y acumulados; (3) CTEs (Common Table Expressions): para consultas legibles y mantenibles; (4) Agregaciones y GROUP BY: incluido el uso de HAVING; (5) Optimización de consultas: estrategias de indexación y planes de ejecución.
¿Cuál es la diferencia entre ROW_NUMBER, RANK y DENSE_RANK?
Las tres son funciones de ventana de ranking, pero gestionan los empates de forma distinta: ROW_NUMBER() asigna números únicos incluso con empates (1, 2, 3, 4); RANK() da el mismo rango a empates pero salta números (1, 2, 2, 4); DENSE_RANK() da el mismo rango sin saltos (1, 2, 2, 3). Usa DENSE_RANK para el "enésimo" valor donde los empates comparten posición.

Científico de Datos Certificado por IBM (2020), anteriormente Geólogo Petrolero/Geomodelador de yacimientos de petróleo y gas en todo el mundo con más de 12 años de experiencia laboral internacional. Dominio de Python, R y SQL. Áreas de especialización: limpieza de datos, manipulación de datos, visualización de datos, análisis de datos, modelado de datos, estadística, narración de historias, aprendizaje automático. Amplia experiencia en la gestión de comunidades de ciencia de datos y en la redacción/revisión de artículos y tutoriales sobre ciencia de datos y temas profesionales.


