L'effetto dell'emissione di un'unione interna equivale a indicare un cross join con la condizione di join nella clausola WHERE. Ho notato che molte persone nella mia azienda usano i cross join, dove utilizzerei i join interni. Non ho notato alcun significativo aumento delle prestazioni dopo aver modificato alcune di queste query e mi chiedevo se fosse solo una coincidenza o se il DBMS ottimizza tali problemi in modo trasparente (MySql nel nostro caso). Ed ecco un esempio concreto per la discussione:Prestazioni dell'aggregazione interna rispetto all'aggiunta incrociata
SELECT User.*
FROM User, Address
WHERE User.addressId = Address.id;
SELECT User.*
FROM User
INNER JOIN Address ON (User.addressId = Address.id);
Il primo non è ANSI SQL. So che Microsoft ha raccomandato di passare alla sintassi del secondo esempio. MySQL può fare lo stesso ora che sono aziendali. Inoltre, il primo non è un cross join. Un cross join verrebbe se si dimenticasse la clausola where. – WakeUpScreaming
Perché non è ANSI SQL? – soulmerge
Quello che si chiama cross join è una sintassi più vecchia. Noi dinosauri :) tendiamo a usarlo. La sintassi Inner join è stata concordata come parte dello standard SQL 92 (IIRC). Da allora i venditori si sono mossi verso il supporto di esso con la maggior parte dei fornitori che supportano entrambi. Pertanto non è ANSI perché non è presente nei documenti. – Karl