Differenza tra Join e =

di il
2 risposte

Differenza tra Join e =

In azienda mi hanno messo a lavorare su un DB SQL 2002 per la sua migrazione a 2012 dove il principale problema è che usavano TPL-SQL travando delle query con solo = per far fare i join con le tabelle e *= (left join) , =*(right join). vi faccio un essempio:

Select 
	ar.codice,
	ar.descrizione,
	vt.nome
	inv.exist
from 
	articolo ar,
	vettore vt,
	inventario inv
where
	ar.vettore = vt.id and
	ar.codice = inv.id_articolo 
allora facendo la rispettiva conversione del caso verrebbe:

	Select 
	ar.codice,
	ar.descrizione,
	vt.nome
	inv.exist
from 
	articolo ar
	left join vettore vt on ar.vettore = vt.id
	join inventario inv on ar.codice = inv.id_articolo
la mia domanda è tutte due danno lo stesso risultato,
qual'è il vantaggio dei join sulla prima sintassi?
conviene solo fare la modifica sulla stringa dei left o right join?
Che differenza c'è tra queste due sintassi che danno lo stesso risultato?

2 Risposte

  • Re: Differenza tra Join e =

    Salve,
    personalmente non conosco SQL Server 2002, ne' il linguaggio TPL-SQL...
    SQL Server e' esistito nella versione 2000, 2005, 2008, ....
    il dialetto di SQL Server e' il Transact SQL...
    al di la' di cio', la differenza sintattica e' relativa agli standard ANSI ... SQL Server 2012 ha deprecato lo standard SQL 89, dove le operazioni di join potevano essere espresse con la formulazione espressa nella clausola di
    WHERE objectA.colA = objectB.colB
    , mentre lo standard ANSI 92 rende tale formulazione deprecata in favore della piu' chiara formulazione
    {LEFT | RIGHT | FULL OUTER} JOIN objectA.colA = objectB.colB

    che obiettivamente e' piu' chiara, a fronte della vecchia sintassi che era piu' prona ad essere fonte di errore da parte degli sviluppatori. Dal punto di vista meramente funzionale NON c'e' alcuna differenza, ed in effetti l'analisi dei piani di esecuzione NON mostra alcuna differenza, ma si e' voluto "aiutare" gli sviluppatori a scrivere codice T-SQL piu' "pulito", visto che "mischiare" le vere condizioni di WHERE con le espressioni di JOIN (implicite nella formulazione ANSI 89) poteva rendere non subito individuabili tali espressioni.
    saluti omnia
    --
    Andre
  • Re: Differenza tra Join e =

    Grazie per la risposta.

    Saluti,
Devi accedere o registrarti per scrivere nel forum
2 risposte