








Hablemos de entrevistas (parte 2) 😎
En la publicación anterior tocamos soft skills, la metodología STAR y Excel. Eso es lo básico. Ahora vamos más allá, SQL.
Si dominas bien Excel, ya entiendes los fundamentos: cómo se relacionan los datos, qué problemas surgen en las uniones, cómo funcionan las agrupaciones. La transición a SQL al principio son básicamente 5 comandos: SELECT, FROM, WHERE, JOIN, GROUP BY. Las funciones de ventana y tablas temporales son útiles, pero al inicio no son críticas.
Ahora vamos a lo principal. El problema principal no es la sintaxis. El problema está en los bloques que no rompen la consulta. El código se ejecuta, el intérprete calla, pero el resultado no es el que espera el entrevistador. Ahí es donde fallan.
1️⃣NOT IN + NULL: silencio en lugar de datos
En SQL: NULL ≠ vacío ≠ 0. Quien haya estudiado Python sabe: cero es cero, NULL es vacío, nada. Tenlo en mente.
Problema: encontrar usuarios que no están en la lista negra.
❌
SELECT * FROM users
WHERE id NOT IN (SELECT user_id FROM blocked)Parece correcto. Pero si en blocked hay al menos una fila con user_id = NULL, el resultado: 0 filas. SQL no puede comparar con NULL y devuelve silenciosamente vacío.
✅
SELECT * FROM users u
WHERE NOT EXISTS (
SELECT 1 FROM blocked b
WHERE b.user_id = u.id
)Por cierto, NOT EXISTS además es más rápido: toma el id, va a la segunda tabla, encuentra la primera coincidencia, se detiene. NOT IN recorre la tabla de arriba a abajo por completo. En tablas grandes la diferencia es notable.
2️⃣ LEFT JOIN que silenciosamente se convirtió en INNER JOIN
Los tipos de JOIN los detallaremos en próximas publicaciones de la serie. Ahora solo la esencia de la trampa.
❌
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
WHERE o.status = 'completed'¿Qué ocurre? WHERE elimina las filas NULL de la tabla derecha. Los clientes sin pedidos simplemente desaparecen. LEFT JOIN se convierte en INNER JOIN. Y el resultado no es el esperado.
✅
SELECT c.name, o.amount
FROM customers c
LEFT JOIN orders o
ON c.id = o.customer_id
AND o.status = 'completed'Una línea con AND. La diferencia es fundamental.
3️⃣AVG miente bonito
Aquí tienes un problema. 10 filas de ventas. Tres tienen NULL. ¿Cuánto devuelve AVG? El promedio de 7, no de 10. Si los valores parecen reales, es difícil notar el engaño. La cifra es realista, pero distorsionada.
❌
SELECT AVG(salary) FROM employees✅
SELECT AVG(COALESCE(salary, 0)) FROM employeesCOALESCE: encuentra NULL, lo reemplaza por 0. También se puede omitir, pero entonces explícale al entrevistador que entiendes el comportamiento de AVG y lo aceptas conscientemente. Ambas opciones cuentan 👌
4️⃣Orden de ejecución: el principal truco
Escribimos: SELECT → FROM → WHERE → GROUP BY.
Se ejecuta: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY.
¿Ilógico? Y tanto 🤷♀️
❌
SELECT category, AVG(sales) AS avg_sales
FROM orders
WHERE avg_sales > 1000
GROUP BY categoryEl alias avg_sales aún no existe en la etapa WHERE. El sistema simplemente no conoce ese campo.
✅
SELECT category, AVG(sales) AS avg_sales
FROM orders
GROUP BY category
HAVING AVG(sales) > 1000HAVING es un filtro después de la agrupación. Lo detallaremos en una publicación aparte de la serie.
5️⃣¿Olvidaste la sintaxis? No entres en pánico
Pasa: nervios, hace tiempo que no tocas el tema. Bueno, ¿a quién no le pasa? Dilo directamente: «Entiendo la lógica, puedo describir los pasos. La sintaxis exacta la buscaría en Google». Cualquier profesional sensato lo valorará. Entender la lógica es una cosa. Buscar una función son 30 segundos.
Bonus final: la primera pregunta en una prueba = «¿Qué SGBD usas?».
DATE_TRUNC — PostgreSQL. DATE_FORMAT — MySQL. Una consulta correcta para la base de datos incorrecta = error de la nada.
En la próxima publicación SQL: Retención y cohortes. Y mañana publicación y artículo sobre el caso de mi equipo con la empresa Grand-Alpha. Se dedican a alimentos para animales.
Pregunta para ti. ¿Alguna vez te ha pasado que olvidaste la respuesta y por más que intentabas no recordabas? ¿Cómo actuaste en esa situación? 👇
#sql
@data_dzen
Comentarios
0Aún no hay comentarios.
Inicia sesión para participar en la conversación.