Zajmę się pytaniem, czy te nierówności są zawsze PRAWDA. Odpowiedź brzmi „nie”, nie w SQL. W większości przypadków są one równoważne. Problem pojawia się przy niejawnej konwersji typu.
W szczególności, jeśli a.id
jest liczbą, a pozostałe kolumny są ciągami, wtedy mamy sytuację, w której:
1 = '1' -- true
1 = '1.00' -- true
'1' = '1.00' -- false
Możesz zobaczyć to
na tych db<>skrzypcach. Byłoby trywialne skonfigurować to za pomocą JOIN
s, ale ponieważ nie zamierzam pisać kodu, który ma przecinki w FROM
klauzula, pozostawię to ćwiczenie tobie.
W praktyce identyfikator używany do złączeń powinien być tego samego typu. Nie możesz nawet zadeklarować relacji klucza obcego, jeśli tak nie jest. Pomijając tę najlepszą praktykę, te dwa zapytania nie są automatycznie równoważne.
Uwaga:byłoby to równie prawdziwe, gdybyś użył właściwego, wyraźnego, standardowego JOIN
składnia, której gorąco zachęcam do nauki i używania wyłącznie.