Oracle
 sql >> Database >  >> RDS >> Oracle

join interni impliciti:sono uguali?

Affronterò la questione se tali disuguaglianze siano sempre VERO. La risposta è "no", non in SQL. Nella maggior parte dei casi, sono equivalenti. Il problema sorge con la conversione di tipo implicita.

In particolare, se a.id è un numero e le altre colonne sono stringhe, quindi hai la situazione in cui:

1 = '1'        -- true
1 = '1.00'     -- true
'1' = '1.00'   -- false

Puoi vedere questo su questo db<>violino. Sarebbe banale configurarlo usando JOIN s, ma dal momento che non scriverò codice che contiene virgole in FROM clausola, lascio a te quell'esercizio.

In pratica, gli ID usati per i join dovrebbero essere dello stesso tipo. Non puoi nemmeno dichiarare una relazione di chiave esterna se non lo sono. A parte questa best practice, le due query non sono automaticamente equivalenti.

Nota:questo sarebbe altrettanto vero se utilizzassi uno standard corretto, esplicito JOIN sintassi, che ti incoraggio fortemente, fortemente ad imparare e ad usare esclusivamente.