Contattaci
Nessun risultato trovato.

Da testo a SQL: confronto dell'accuratezza di LLM

Cem Dilmegani
Cem Dilmegani
aggiornato il Feb 25, 2026
Guarda il nostro norme etiche

Utilizzo SQL per l'analisi dei dati da 18 anni, fin dai tempi in cui lavoravo come consulente. Tradurre le domande in linguaggio naturale in SQL rende i dati più accessibili, consentendo a chiunque, anche a chi non possiede competenze tecniche, di lavorare direttamente con i database.

Abbiamo utilizzato la nostra metodologia di benchmark text-to-SQL su 34 modelli linguistici di grandi dimensioni (LLM) per valutarne le prestazioni nella generazione di comandi SQL:

Loading Chart

Errori comuni nel codice SQL generato da LLM

I modelli LLM spesso commettono quattro tipi di errori: join errati, errori di aggregazione, filtri mancanti ed errori di sintassi.

Logica di join errata

I modelli spesso faticavano a identificare e implementare correttamente le necessarie operazioni `JOIN` tra le tabelle, a volte omettendole del tutto o utilizzando in modo improprio subquery meno ottimali.

LLM non è riuscito a unire correttamente le tabelle `frpm` e `schools` utilizzando il `CDSCode`. Ha inoltre generato nomi di colonna errati (`Charter`) e valori di filtro errati (`County = 'Fresno'`).

Gli errori nella logica di join compromettono in modo fondamentale l'aspetto relazionale della query, portando a un recupero di dati incompleto o errato quando sono coinvolte più tabelle.

Errori di aggregazione e raggruppamento

Un altro punto critico comune era l'applicazione errata di funzioni di aggregazione (come `MAX`, `AVG`, `COUNT`, `SUM`) o di clausole `GROUP BY`, che portavano a risultati che non corrispondevano semanticamente all'intento dell'utente.

L'LLM ha correttamente identificato che la frase " punteggio medio più alto " richiede il raggruppamento dei dati per distretto (GROUP BY dname) e l'utilizzo di una funzione di aggregazione (AVG(AvgScrRead)). Questa parte della logica è corretta.

Tuttavia, il modello LLM non è riuscito a incorporare un filtro fondamentale richiesto dalla domanda: la parola " attivo ". Per soddisfare questo requisito, la query avrebbe dovuto unire la tabella satscores con la tabella schools e quindi filtrare i risultati con una clausola WHERE T1.StatusType = 'Active'.

Questo evidenzia un errore comune negli algoritmi LLM: l'esecuzione corretta di un'istruzione primaria e ovvia (il calcolo di una media) omettendo al contempo una condizione secondaria ma altrettanto importante (il filtraggio in base allo stato). Ciò dimostra una debolezza nella sintesi di vincoli multipli in un'unica query corretta.

Filtri mancanti o errati

A volte i modelli non includevano le clausole `WHERE` necessarie o selezionavano le colonne sbagliate nell'istruzione `SELECT`, non rispettando completamente i vincoli o le informazioni esplicitamente richieste nel prompt.

L'LLM ha identificato correttamente la logica per trovare la scuola (`ORDER BY NumGE1500 DESC LIMIT 1`), ma non è riuscito a selezionare il numero di telefono richiesto e ha omesso la necessaria join alla tabella `schools` per recuperarlo.

Questi errori derivano spesso da un'analisi incompleta della richiesta dell'utente o dalla mancata mappatura di tutte le parti della richiesta ai componenti finali della query SQL.

Errori di sintassi

Oltre agli errori semantici, si sono verificati veri e propri errori di sintassi, come l'utilizzo di alias di tabella errati o la produzione di istruzioni SQL incomplete, che impediscono l'esecuzione della query.

L'LLM ha utilizzato alias errati (`accounts` invece di `account`) e ha incluso una stringa letterale incompleta (`'POPLATEK PO OBRATU…'`), con conseguente sintassi SQL non valida.

Questi problemi di sintassi evidenziano le difficoltà nel generare codice che aderisca rigorosamente alla grammatica SQL e alle convenzioni specifiche del database.

Perché alcuni LLM sono più bravi con SQL

Diversi fattori chiave determinano l'efficacia con cui un modello linguistico di grandi dimensioni (LLM) è in grado di trasformare una domanda in linguaggio naturale in una query SQL corretta per un database.

1. Dimensioni del modello e dati di addestramento

  • Dimensioni e design: i modelli più grandi o quelli costruiti con strutture specifiche possono gestire compiti complessi, come la generazione di query SQL, in modo più efficace.
  • Cosa ha imparato: I dati utilizzati per addestrare l'LLM sono essenziali. Se l'LLM vede molti esempi di domande collegate a risposte SQL, soprattutto quelle che coinvolgono operazioni complesse come join o calcoli (SOMMA, MEDIA), è probabile che ottenga risultati migliori.

2. Ottimizzazione per le attività SQL

  • È possibile fornire ai modelli un addestramento aggiuntivo specificamente focalizzato sulle attività di conversione da testo a SQL. Questa "messa a punto" li aiuta a comprendere le strutture dei database e le regole SQL in modo più efficace rispetto ai modelli addestrati solo su testo generico. Anche l'addestramento su istruzioni specifiche risulta utile.

3. Capacità di ragionamento e di mappatura degli schemi

  • Ragionamento: Quanto bene il LLM riesce a capire i passaggi esatti necessari a partire da una domanda a volte vaga? La creazione di query SQL spesso richiede passaggi logici .
  • Comprensione della mappa del database (Schema): Alcuni LLM sono più efficaci nel collegare i concetti presenti nella domanda (come "clienti" o "vendite totali") ai nomi effettivi di tabelle e colonne nel database, anche se i nomi non sono immediatamente ovvi.

Come gli LLM generano SQL: una guida passo passo

Per vedere in azione fattori come il "ragionamento" e la "mappatura dello schema", analizziamo passo passo il processo che un modello segue per generare una query. L'intero flusso di lavoro si basa su una tecnica chiamata Retrieval-Augmented Generation (RAG).

Fase 1: Analisi iniziale e selezione del database

Quando gli viene posta una domanda, il LLM analizza innanzitutto l'intento dell'utente per selezionare lo strumento di database più pertinente.

  • Domanda: "Quanti conti hanno un titolare che dispone e richiede la generazione di un estratto conto a seguito di una transazione?"
  • Azione di LLM: Il modello identifica parole chiave come "conti", "disposizione" e "transazione". Conclude che lo strumento di database financial è la scelta corretta rispetto ad altri come california_schools o superhero.

Fase 2: Recupero dello schema tramite RAG

Una volta che il modello sceglie uno strumento, ha bisogno della "mappa" del database che ne rappresenti lo schema. Non ha queste informazioni memorizzate. Il sistema RAG, invece, le recupera in tempo reale.

  1. Recupero: La domanda dell'utente viene utilizzata per cercare in un database vettoriale che memorizza le informazioni sullo schema. La ricerca trova e recupera i dettagli dello schema più rilevanti, come le definizioni per le tabelle accounts e disp.
  2. Arricchimento: il testo dello schema recuperato viene inserito automaticamente nel prompt accanto alla domanda originale.
  3. Generazione: L'LLM ora dispone di tutto il contesto necessario per procedere.

Questo processo RAG garantisce che il modello riceva solo le informazioni di schema necessarie, rendendo il suo compito più mirato ed efficiente.

Fase 3: Ragionamento e costruzione della query

Grazie alla domanda e allo schema fornito da RAG, il modello associa i concetti della richiesta dell'utente ai nomi specifici di tabelle e colonne appena ricevuti.

Il monologo interiore di LLM:

  1. Obiettivo: l'utente desidera un conteggio, quindi inizierò con SELECT COUNT(...).
  2. Condizioni:
    • “…disposizione del proprietario…” -> Lo schema della tabella disp ha una colonna type. Ho bisogno di una clausola WHERE per type = 'OWNER'.
    • “…dichiarazione da generare in seguito a una transazione…” -> Lo schema della tabella accounts ha una colonna frequency. Il filtro dovrebbe essere frequency = 'POPLATEK PO OBRATU'.
  3. Join: Le informazioni sono suddivise tra le tabelle accounts e disp. Lo schema mostra che sono collegate da account_id, quindi devo JOIN.

Fase 4: Generazione dell'SQL finale

Infine, il modello assembla questi elementi logici in una query SQL sintatticamente corretta. La qualità di questo output dipende da:

  1. Capacità di ragionamento: la capacità del modello di collegare logicamente la richiesta dell'utente allo schema fornito.
  2. Conoscenza di SQL acquisita tramite formazione: la comprensione di base della sintassi e delle funzioni SQL da parte del modello.

Questo processo spiega perché si verificano gli errori. Se lo schema recuperato è ambiguo o un termine nella domanda non corrisponde in modo univoco, l'LLM deve fare una supposizione fondata, il che può portare agli errori che abbiamo analizzato in precedenza.

Che cos'è la conversione da testo a SQL?

La tecnologia Text-to-SQL è un'elaborazione del linguaggio naturale che converte il linguaggio di tutti i giorni in una query SQL scritta in linguaggio SQL (Structured Query Language). Invece di scrivere manualmente il codice SQL, l'utente pone una domanda in linguaggio naturale e il sistema genera un'istruzione SQL che può essere eseguita su un database.

Lo scopo principale della conversione da testo a SQL è quello di ridurre il divario tra il modo in cui le persone concepiscono i dati e il modo in cui i database richiedono che vengano scritte le query. Ciò è particolarmente rilevante per gli utenti non tecnici e per gli analisti di dati che comprendono il contesto aziendale ma potrebbero non sentirsi a proprio agio nello scrivere la sintassi SQL da zero.

A livello base, quando un utente pone una domanda come:

  • "Mostra tutti i clienti di New York che hanno effettuato acquisti il mese scorso."

Il sistema traduce la richiesta in una query SQL generata automaticamente, che seleziona le colonne corrette, filtra le righe utilizzando vincoli di data e posizione e unisce le tabelle del database necessarie. La qualità dell'output dipende dalla capacità del sistema di generare query accurate che riflettano sia l'intento dell'utente sia lo schema del database.

Dove la conversione da testo a SQL è utile oggi

La conversione da testo a SQL funziona abbastanza bene per:

  • Genera bozze di query che gli analisti di dati possano esaminare e modificare.
  • Supporto all'analisi esplorativa dei dati laddove la velocità è più importante della precisione.
  • Consenti agli utenti non tecnici di accedere a dati semplici tramite schemi predefiniti.
  • Aiuta gli utenti SQL riducendo la necessità di scrivere query ripetitive.

In questi casi, la conversione da testo a SQL funziona come uno strumento di intelligenza artificiale di supporto, piuttosto che come un sistema autonomo. La revisione umana rimane parte integrante del flusso di lavoro, soprattutto quando la correttezza è fondamentale.

Come funziona la conversione da testo a SQL?

I moderni sistemi di conversione da testo a SQL si basano su modelli linguistici di grandi dimensioni addestrati su coppie di domande in linguaggio naturale e query SQL. Questi modelli apprendono schemi che collegano il linguaggio quotidiano alle strutture SQL, ai nomi delle tabelle, alle colonne e alle relazioni. Il processo in genere segue una sequenza di passaggi:

Comprensione del linguaggio naturale

Il sistema analizza innanzitutto l'input dell'utente per determinarne l'intento, i vincoli e le entità. Questa fase prevede:

  • Identificare ciò che l'utente sta chiedendo (ad esempio, totali, filtri, confronti)
  • Estrazione di condizioni rilevanti quali intervalli di tempo, posizioni o categorie
  • Interpretare frasi ambigue che possono richiedere un contesto aziendale

Gli errori in questa fase spesso portano a una query SQL apparentemente corretta che però risponde alla domanda sbagliata.

Mappatura Schema

Successivamente, il sistema associa i termini della domanda allo schema del database. Ciò include:

  • Abbinamento dei concetti presenti nella domanda ai nomi delle tabelle e alle colonne
  • Comprendere le relazioni tra le tabelle
  • Rispettando i tipi di dati, come date, campi numerici o categorie.

La mappatura dello schema diventa più complessa all'aumentare del numero di tabelle o quando i nomi delle colonne non corrispondono esattamente al modo in cui gli utenti descrivono i dati nelle domande in linguaggio naturale.

Costruzione della query SQL

Una volta identificati l'intento e gli elementi dello schema, il sistema costruisce la query SQL. Ciò può includere:

  • Selezione delle tabelle e delle colonne corrette
  • Aggiunta di join a tutte le tabelle necessarie
  • Applicazione di filtri, aggregazioni e logica di raggruppamento
  • Generare codice SQL sintatticamente valido per sistemi come MySQL o PostgreSQL

In questa fase, il sistema può facilmente produrre codice SQL valido ma logicamente errato, ad esempio utilizzando una condizione di join o un'aggregazione sbagliata.

Validazione ed esecuzione

Alcuni sistemi includono livelli di validazione che verificano che la query SQL generata possa essere eseguita e restituire risultati. Strumenti più avanzati possono tentare un'ottimizzazione limitata o porre domande di approfondimento quando la query è ambigua.

Tuttavia, la validazione raramente garantisce una risposta corretta. Una query può essere eseguita con successo e risultare comunque errata in modi sottili.

Limitazioni e rischi pratici

Nonostante gli ottimi punteggi ottenuti nei benchmark, l'utilizzo nel mondo reale mette in luce diverse limitazioni che non possono essere ignorate.

Affidabilità e correttezza

Anche i modelli più performanti non riescono a produrre codice SQL corretto per una quota significativa di query complesse. Un tasso di errore pari o superiore al 20% significa:

  • Una query su cinque potrebbe restituire risultati fuorvianti.
  • Gli errori sono spesso semantici piuttosto che sintattici.
  • Collegamenti, filtri o aggregazioni errati potrebbero passare inosservati

Ciò è particolarmente rischioso nei sistemi di reporting, previsione o supporto alle decisioni, dove gli utenti presumono che il risultato sia corretto.

Dipendenza dalla supervisione umana

Viste le prestazioni attuali, il codice SQL generato deve essere esaminato da qualcuno che conosca SQL e il database. Senza questa supervisione:

  • Gli utenti potrebbero fidarsi di una query errata perché viene eseguita correttamente.
  • Gli errori possono propagarsi a dashboard, report o sistemi a valle.
  • La responsabilità diventa poco chiara quando le decisioni si basano su risultati generati dall'intelligenza artificiale.

La tecnologia Text-to-SQL non elimina la necessità di competenze SQL; si limita a spostare il contesto in cui tali competenze vengono applicate.

Limite massimo di complessità

Con l'aumentare della complessità delle query, le prestazioni calano drasticamente. I modelli incontrano difficoltà con:

  • Molteplici join tra più tabelle
  • Logica annidata e sottoquery
  • Calcoli specifici del dominio
  • Query che richiedono una conoscenza approfondita dello schema del database

Benchmark come BIRD-SQL evidenziano che le query complesse rimangono il principale punto critico, anche per i modelli più avanzati.

Variabilità del modello

Le differenze di prestazioni tra i modelli sono significative. Alcuni modelli linguistici funzionano abbastanza bene, mentre altri falliscono frequentemente sullo stesso set di dati. Ciò significa che:

  • La scelta del modello ha un impatto diretto sulla precisione.
  • La messa a punto e l'addestramento dei dati sono importanti
  • I modelli generici potrebbero non funzionare bene senza un adattamento al dominio.

Non esiste una soluzione universale che funzioni ugualmente bene per tutti i database e i casi d'uso.

Governance dei dati e privacy

I sistemi Text-to-SQL introducono ulteriori rischi di accesso:

  • Gli utenti potrebbero interrogare tabelle sensibili senza comprenderne le implicazioni.
  • Il codice SQL generato può esporre metadati relativi allo schema del database.
  • I controlli sulla privacy dei dati devono essere applicati anche al di fuori del modello linguistico.

In assenza di solidi controlli di accesso, la conversione da testo a SQL può indebolire le pratiche di governance esistenti.

Metodologia di benchmarking per la conversione da testo a SQL

Questo benchmark condivide il suo quadro di valutazione con il nostro benchmark RAG agentico , che descrive in dettaglio la costruzione del dataset, l'architettura dell'agente, la sfida dell'ambiguità semantica e la griglia di punteggio completa.

Entrambi i benchmark utilizzano lo stesso BIRD-SQL da 500 domande 1 sottoinsieme, pipeline agentica, recupero dello schema basato su ChromaDB e valutazione LLM-as-Judge con Claude 4 Sonnet. La metrica qui riportata, tasso di generazione di comandi SQL corretti, è la percentuale di domande in cui il modello ha sia instradato al database corretto sia generato una query SQL semanticamente corretta. Tutti i modelli sono stati valutati in condizioni zero-shot identiche con temperatura 0 e senza suggerimenti specifici del dominio.

Per approfondire

Esplora altri parametri di riferimento RAG, come ad esempio:

Registro delle modifiche

20 febbraio 2026

Sono stati aggiunti 2 nuovi modelli al benchmark:

  • Google: Anteprima di Gemini 3.1 Pro (google/gemini-3.1-pro-preview)
  • Anthropic: Claude Sonnet 4.6 (anthropic/claude-sonnet-4.6)

10 febbraio 2026

Sono stati aggiunti 2 nuovi modelli al benchmark:

  • Claude Opus 4.6 (anthropic/claude-opus-4.6)
  • Kimi K2.5 (moonshotai/kimi-k2.5)

FAQ

In base ai nostri risultati, non dovreste fidarvi completamente delle query complesse generate dagli attuali modelli LLM senza previa validazione. Sebbene utili per la stesura e per richieste semplici, anche i modelli più performanti presentano tassi di errore significativi (fino al 20% per attività complesse). È sempre consigliabile rivedere e verificare il codice SQL generato, soprattutto per le applicazioni critiche.

Sì, molti LLM hanno funzionalità che vanno oltre la semplice generazione di SELECT. Spesso possono aiutare a comprendere e suggerire modifiche al codice SQL esistente o persino a generare DDL (Data Definition Language) come istruzioni CREATE TABLE basate su descrizioni, sebbene l'accuratezza di queste attività richieda anche una verifica.

Fornire un contesto chiaro è fondamentale. Assicurarsi che il LLM abbia accesso allo schema del database (nomi delle tabelle, nomi delle colonne, relazioni). Indicare chiaramente il risultato desiderato e, se possibile, fornire alcuni esempi di query pertinenti (suggerimenti a breve termine) da cui il LLM possa apprendere, può migliorare significativamente la sua capacità di selezionare le tabelle corrette e costruire query accurate.

Sebbene i LLM possano astrarre alcune piccole differenze di sintassi tra i dialetti del database, non risolvono completamente i problemi di compatibilità tra le versioni dei tipi di database. Potrebbero comunque generare codice SQL specifico per un determinato dialetto (ad esempio, PostgreSQL rispetto a MySQL) o non utilizzare funzioni compatibili con le versioni precedenti, a meno che non vengano esplicitamente guidati o addestrati a farlo. La validazione rispetto al database di destinazione rimane quindi fondamentale.

Cem Dilmegani
Cem Dilmegani
Analista principale
Cem è analista principale presso AIMultiple dal 2017. AIMultiple fornisce informazioni a centinaia di migliaia di aziende (secondo SimilarWeb), tra cui il 55% delle aziende Fortune 500, ogni mese. Il lavoro di Cem è stato citato da importanti pubblicazioni globali come Business Insider, Forbes, Washington Post, società globali come Deloitte e HPE, ONG come il World Economic Forum e organizzazioni sovranazionali come la Commissione Europea. È possibile consultare l'elenco di altre aziende e risorse autorevoli che hanno citato AIMultiple. Nel corso della sua carriera, Cem ha lavorato come consulente tecnologico, responsabile acquisti tecnologici e imprenditore nel settore tecnologico. Ha fornito consulenza alle aziende sulle loro decisioni tecnologiche presso McKinsey & Company e Altman Solon per oltre un decennio. Ha anche pubblicato un report di McKinsey sulla digitalizzazione. Ha guidato la strategia tecnologica e gli acquisti di un'azienda di telecomunicazioni, riportando direttamente al CEO. Ha inoltre guidato la crescita commerciale dell'azienda deep tech Hypatos, che ha raggiunto un fatturato annuo ricorrente a 7 cifre e una valutazione a 9 cifre partendo da zero in soli 2 anni. Il lavoro di Cem in Hypatos è stato oggetto di articoli su importanti pubblicazioni tecnologiche come TechCrunch e Business Insider. Cem partecipa regolarmente come relatore a conferenze internazionali di settore. Si è laureato in ingegneria informatica presso l'Università di Bogazici e ha conseguito un MBA presso la Columbia Business School.
Visualizza il profilo completo
Ricercato da
Ekrem Sarı
Ekrem Sarı
Ricercatore di intelligenza artificiale
Ekrem è un ricercatore di intelligenza artificiale presso AIMultiple, specializzato in automazione intelligente, GPU, agenti di intelligenza artificiale e framework RAG.
Visualizza il profilo completo

Commenti 1

Condividi i tuoi pensieri

Il tuo indirizzo email non verrà pubblicato. Tutti i campi sono obbligatori.

0/450
PFJ Rofgowski
PFJ Rofgowski
Dec 10, 2025 at 20:04

Curious, how much of the context engineering and specific prompting did you apply in your benchmarks. Or, was it to review the models only? I have found much higher return of correct and consistent responses. A higher fidelity. To do that, I needed to provide a most sophisticated prompt that fed the context window as the question was being asked. Not perfect, but better than those scores represented in this article when using the Grok 4.x .

Ekrem Sarı
Ekrem Sarı
Feb 10, 2026 at 08:46

Great point. This benchmark intentionally uses zero-shot, minimal prompting with temperature=0. No few-shot examples, no domain-specific instructions, no iterative refinement. The goal was to measure each model's baseline text-to-SQL capability. So your experience with Grok 4 getting higher fidelity through sophisticated context engineering is completely expected. A well-crafted prompt with detailed schema descriptions, few-shot examples, and domain-specific rules will improve any model's performance significantly. What this benchmark isolates is how well the model performs out-of-the-box when given only the raw question and retrieved schema, which helps compare the models' inherent SQL reasoning abilities on a level playing field.           We'll make this clearer in the methodology section. Thanks for raising it.