Consultas SQL con IA: uso adecuado de Claude, ChatGPT y DeepSeek
Qué hace bien la IA y qué no, cómo armar un buen prompt, qué herramienta usar, cómo perfilar la base y cómo construir el prompt maestro de contexto. Regla de oro: la IA propone, los datos verifican.
1. Punto de partida: la IA genera SQL probable, no SQL verificado
| Lo que sí hace bien | Lo que no puede hacer |
|---|---|
| Escribe el borrador de la consulta en segundos | Ver tu base: solo conoce lo que le contás |
| Explica línea por línea lo que no entendés | Saber que ID_PROFE tiene NULL sin el perfilado |
| Encuentra errores de sintaxis y los corrige | Garantizar que el resultado sea correcto |
| Traduce una pregunta de negocio a SQL | Adivinar tus reglas de negocio |
| Documenta y ordena consultas largas | Hacerse responsable de un DELETE |
Regla
La IA es un copiloto rápido; el piloto y el control de calidad sos vos.2. Anatomía de un buen prompt: cinco piezas
| # | Pieza | Qué va |
|---|---|---|
| 1 | Rol | Actuá como analista de BI experto en MySQL 8 |
| 2 | Contexto | Tablas, columnas, claves, valores posibles, NULLs |
| 3 | Tarea | Qué pregunta de negocio hay que responder |
| 4 | Formato | Una consulta, comentada, columnas y orden |
| 5 | Restricciones | Solo MySQL 8, sin inventar columnas, explicá |
-- 1 ROL
Actuá como analista de BI experto en MySQL 8.
-- 2 CONTEXTO
empleados(ID_EMPLEADO PK, NOMBRE, CARGO 'Mozo'/'Secretaria', SALARIO)
-- 3 TAREA
¿Qué cargo cuesta más en planilla y qué % del total representa?
-- 4 FORMATO
Una consulta comentada: cargo, total_salarios, pct_del_total.
-- 5 RESTRICCIONES
Sin inventar columnas. Explicá cada línea en una oración.3. Claude, ChatGPT y DeepSeek: ¿cuál uso y para qué?
| Claude (Anthropic) | ChatGPT (OpenAI) | DeepSeek (China) | |
|---|---|---|---|
| Fuerte en | Explicaciones ordenadas y pedagógicas; acepta esquemas largos completos | Muy versátil; puede ejecutar Python para probar lógica | Gratis y fuerte en código; modo razonamiento que muestra los pasos |
| Usalo para | Revisar y refactorizar | Traducir preguntas a SQL | Segunda opinión |
| Privacidad | Revisá en Configuración si tus chats se usan para entrenar | Desactivá el entrenamiento en Controles de datos | Datos en servidores en China: solo estructura, nunca datos reales |
Ojo
Las tres cambian seguido de versión y de plan gratuito. Lo que no cambia: comparar respuestas y verificar con los datos.4. Seis reglas de oro
- Estructura sí, datos no: pegá tablas y columnas. Nunca cédulas, salarios reales ni clientes.
- Leé antes de ejecutar: si no podés explicar una línea, no la ejecutes.
- Verificá con números: conteo de filas y totales contra una consulta simple.
- SELECT antes de modificar: ningún UPDATE o DELETE de la IA sin SELECT previo y transacción.
- Pedí que explique: «Explicá cada línea» convierte la respuesta en una clase.
- Iterá con el error: si falla, pegale el mensaje exacto de MySQL.
5. Cinco errores típicos de la IA (los vamos a ver en tablas_libro)
| Error | Ejemplo | Unidad |
|---|---|---|
| Inventa columnas | Usa cursos.PROFESOR o alumnos.EDAD, que no existen | U2 |
| Sintaxis de otro motor | TOP 5, ISNULL(), || para concatenar: no es MySQL | U2 |
| Pierde filas con INNER JOIN | «SQL avanzado» desaparece por no tener profesor | U4 |
| NOT IN con NULL | Devuelve 0 filas sin avisar. Correcto: NOT EXISTS | U5 |
| Confunde precios | PRECIO de lista ≠ PRECIO cobrado: 38,54 vs 36,38 | U4 |
6. Paso 0: perfilar la base antes de preguntar
Abrí 04_Perfilado_Generico_BD.sql en Workbench (solo lee, no modifica nada), cambiá una línea y ejecutá todo. Guardá cada bloque en CSV con el botón Export → CSV.
SET @bd = 'tablas_libro';
-- Export → CSV de cada bloque
-- A la IA: 03_nulos, 05_valores, 06_estructura_ia| Bloque | Qué muestra | Archivo | ¿A la IA? |
|---|---|---|---|
| 1 · Tablas y filas reales | COUNT(*), no TABLE_ROWS | 01_tablas.csv | Opcional |
| 2 · Diccionario | Tipo, PK, FK, NULL | 02_columnas.csv | Opcional |
| 3 · Nulos reales | Cuántos hay de verdad | 03_nulos.csv | SÍ |
| 4 · Relaciones | Hija → padre | 04_relaciones.csv | Opcional |
| 5 · Valores posibles | Solo catálogos | 05_valores_posibles.csv | SÍ |
| 6 · Estructura para IA | Una línea por tabla | 06_estructura_ia.csv | SÍ |
¿Por qué COUNT(*) y no TABLE_ROWS?
TABLE_ROWS es una estimación: para facturas dice 0 y en realidad hay 1. Sin perfilado la IA adivina la base; con perfilado, la conoce.⬇ Descargar perfilado de tablas_libro (Google Drive)
7. Lo que encontró el perfilado: los NULL reales anticipan las trampas
tablas_libro en números: 30 tablas · 6 alumnos · 5 cursos (1 sin profesor) · 4 profesores (1 sin cursos) · 8 inscripciones · 16 mascotas. Chica a propósito: todo se verifica a mano.
| Columna | Nulos | Trampa que anticipa | Unidad |
|---|---|---|---|
cursos.ID_PROFE | 1 de 5 | INNER JOIN pierde «SQL avanzado» · NOT IN da 0 filas | U4 · U5 |
quinielas.ACIERTOS | 2 de 21 | Promedios y acumulados: filtrar ESCRUTADA = 'S' | U3 · U6 |
vehiculos.ULTI_ITV | 3 de 5 | Mostrar «Sin inspección» con COALESCE | U2 |
eventos.RESULTADO | 9 de 30 | Jornadas sin disputar: no son empates | U3 |
Valores posibles (bloque 5): empleados.CARGO: ‘Mozo’, ‘Secretaria’ · mascotas.ESTADO: ‘A’, ‘B’ · mascotas.UBICACION: ‘E01’ … ‘E05’ · quinielas.ESCRUTADA: ‘N’, ‘S’.
Catálogos sí, personas no
Nombres y apellidos no se repiten, así que el perfilado no los copia. Solo pasan columnas con 12 valores o menos que se repiten.8. Método de trabajo: seis pasos del perfilado a la verificación
| 1 · Perfilar | 2 · Prompt | 3 · 3 IAs | 4 · Comparar | 5 · Ejecutar | 6 · Verificar |
|---|---|---|---|---|---|
| Y guardar en CSV | Perfilado + notas + tarea | Claude · ChatGPT · DeepSeek | ¿Qué cambia entre las 3? | En MySQL Workbench | Filas, totales, NULLs |
-- Verificación mínima de cualquier consulta generada por IA
SELECT COUNT(*) FROM ( /* pegá acá la consulta de la IA */ ) t; -- ¿cuántas filas esperaba?
SELECT SUM(TOTAL_LINEA) FROM lineas_factura; -- ¿cuadra con TOTAL_FACTURA = 36,38?9. Prompt maestro de contexto: sale del perfilado, no de memoria
Se arma copiando la salida del perfilado y sumando tus notas de negocio. Adjuntá los CSV 03, 05 y 06, o pegá la versión larga.
-- ESTRUCTURA (bloque 6)
cursos(ID_CURSO int PK, TITULO varchar(50),
ID_PROFE int FK→profesores.ID_PROFE NULL)
lineas_factura(ID_FACTURA int PK FK→facturas,
ID_LINEA int PK, ID_ARTICULO int FK→articulos,
CANTIDAD int, PRECIO float, TOTAL_LINEA float)
-- NULOS REALES (bloque 3)
cursos.ID_PROFE 1 de 5 · quinielas.ACIERTOS 2 de 21
-- VALORES POSIBLES (bloque 5)
empleados.CARGO: 'Mozo', 'Secretaria'
-- NOTAS DE NEGOCIO (vos)
lineas_factura.PRECIO = cobrado · articulos.PRECIO = lista
-- REGLAS
MySQL 8 · no inventes · decime cuántas filas esperarPor qué funciona
- La estructura se copia de la base real.
- Los NULL reales anticipan las trampas.
- Catálogos sí, datos personales no.
- Tus notas cubren lo que la estructura no dice.
Versión para pegar en el chat (adjuntando los 3 CSV)
Actuá como analista de BI experto en MySQL 8. Respondé con SQL listo para
Workbench, comentado en español, y explicá cada línea en una oración.
Te adjunto el perfilado de mi base tablas_libro:
- 06_estructura_ia.csv → tablas, columnas, tipos, PK y FK
- 03_nulos.csv → columnas con NULL reales
- 05_valores_posibles.csv → valores de las columnas tipo catálogo
Leelos antes de responder y usá SOLO esas tablas y columnas.
NOTAS DE NEGOCIO:
- lineas_factura.PRECIO = precio cobrado; articulos.PRECIO = precio de lista.
- empleados_tmp es la tabla de práctica para INSERT/UPDATE/DELETE.
REGLAS: MySQL 8 · si falta algo, preguntá antes de inventar ·
al final decime cuántas filas debería devolver.
Confirmá en 3 líneas qué entendiste de la base antes de empezar.Tu turno
Ejercicio
Con el prompt maestro ya cargado, armá un prompt con las cinco piezas para responder: «¿Qué cargo nos cuesta más en planilla y qué porcentaje del total representa?». Pedilo en dos IAs, compará y verificá.
Ver solución
-- Total de salarios por cargo y % sobre la planilla
SELECT CARGO,
SUM(SALARIO) AS total_salarios,
ROUND(SUM(SALARIO) * 100 / (SELECT SUM(SALARIO) FROM empleados), 1) AS pct_del_total
FROM empleados
GROUP BY CARGO
ORDER BY total_salarios DESC;
-- Tenés que obtener: Mozo 2900 → 52,5 % · Secretaria 2625,5 → 47,5 %