Jeg vil tage fat på spørgsmålet om, hvorvidt disse uligheder altid er rigtigt. Svaret er "nej", ikke i SQL. Under de fleste omstændigheder er de ækvivalente. Problemet opstår med implicit typekonvertering.
Især hvis a.id
er et tal og andre kolonner er strenge, så har du den situation, hvor:
1 = '1' -- true
1 = '1.00' -- true
'1' = '1.00' -- false
Du kan se dette
på denne db<>violin. Det ville være trivielt at sætte dette op ved hjælp af JOIN
s, men da jeg ikke kommer til at skrive kode, der har kommaer i FROM
klausul, overlader jeg den øvelse til dig.
I praksis skal id'er, der bruges til joins, være af samme type. Du kan ikke engang erklære et udenlandsk nøgleforhold, hvis de ikke er det. Bortset fra den bedste praksis er de to forespørgsler ikke automatisk ækvivalente.
Bemærk:Dette ville være lige så sandt, hvis du brugte korrekt, eksplicit, standard JOIN
syntaks, som jeg kraftigt opfordrer dig til udelukkende at lære og bruge.