In effetti, stai chiedendo troppo al tuo database.
I database sono progettati per DBA e sviluppatori. Quelli non sono il tipo di persone che di solito considerano che a .. b = b .. a in un contesto di un database o di un programma e naturalmente tenderebbe a mettere il minimo al primo e il secondo al massimo.
Probabilmente per questo motivo, i progettisti del database che stai utilizzando considerano l'inverso, cioè a .. b con a > b , costituisce un caso limite che non vale un trattamento speciale. Dopotutto, l'obiettivo del motore di database è enormemente rapido e ciò significa rimuovere i casi limite dal codice.
Meno codice significa meno rischi di un errore al suo interno, meno debug, meno log, meno test e, in definitiva, meno cicli di CPU e utilizzo della memoria.
Se le stesse persone stavano progettando non un database, ma un prodotto rivolto a utenti ordinari, potrebbero aver preso la decisione opposta, considerando che un utente semplice avrebbe considerato che " a è tra b e c "è esattamente lo stesso come" a è tra c e b ”.
Come hanno deciso quando creare le specifiche? Forse hanno fatto un'ipotesi educata. Forse non gliene potrebbe importare di meno e considerano che non vogliono scrivere altro codice. O forse hanno effettivamente osservato i programmatori usando il loro motore di database, e hanno determinato che la frequenza dell'errore che hai fatto è troppo piccola per preoccuparsi. Per lo stesso motivo, molti database dieci anni fa rispondevano più velocemente a select a, b from c
rispetto a select * from c
, ma questo non è sempre vero: guardando migliaia di programmatori che usano *
quando non dovrebbero, progettisti di alcuni database i motori hanno finito per gestire questo caso in modo specifico per offrire le stesse prestazioni o prestazioni simili per entrambe le query.