În mod standard în SQL, o subinterogare plasată în clauza FROM (numită Derived Table) este complet izolată: ea nu poate accesa sau referi coloanele altor tabele declarate înaintea ei în aceeași clauză FROM.
Cuvântul cheie LATERAL (introdus în MySQL 8.0.14) elimină această restricție, funcționând similar unei bucle for-each: permite subinterogării derivate să acceseze coloane din rândul curent al tabelului din stânga. Acest lucru rezolvă elegant problema clasică „Top N rezultate pentru fiecare categorie / client”.
-- Fără LATERAL, această problemă necesita subinterogări complexe și lente.
-- Cu LATERAL, interogarea din dreapta are acces direct la c.id:
SELECT
c.id AS client_id,
c.nume,
ultimele_comenzi.id AS comanda_id,
ultimele_comenzi.total,
ultimele_comenzi.data_plasare
FROM clienti c,
LATERAL (
SELECT id, total, data_plasare
FROM comenzi
WHERE client_id = c.id -- Referință către tabelul părinte din stânga!
ORDER BY data_plasare DESC
LIMIT 2
) AS ultimele_comenzi;
Diferența dintre LATERAL și un JOIN Obișnuit
Un JOIN obișnuit evaluează ambele tabele independent și le combină prin condiția ON. Un LATERAL JOIN re-evaluează subinterogarea pentru fiecare rând în parte din tabelul exterior, permițând aplicarea de clauze LIMIT, agregări specifice sau calcule de ferestre direct la nivelul fiecărei entități individuale.