Hmm, aquí fue un resultado sorprendente. No tengo SQL Server aquí, así que probé esto en Postgres. Obviamente se aplican exenciones de responsabilidad: esto no necesariamente dará los mismos resultados, su millaje puede variar, consulte a un médico antes de usar. Pero aún así ...
que acabo de escribir una consulta sencilla de dos maneras diferentes:
select *
from foo
where (select code from bar where bar.barid=foo.barid) between 'A' and 'B'
y
select *
from foo
where (select code from bar where bar.barid=foo.barid)>='A'
and (select code from bar where bar.barid=foo.barid)<='B'
Sorprendentemente para mí, ambos tenían tiempos de ejecución casi idénticos. Cuando hice un PLAN DE EXPLICACIÓN, dieron resultados idénticos. Específicamente, la primera consulta hizo la búsqueda contra la barra dos veces, una para la prueba> = y otra para la prueba < =, al igual que la segunda consulta.
Conclusión: En Postgres, al menos, BETWEEN es simplemente azúcar sintáctico.
Personalmente, lo uso regularmente porque es más claro para el lector, especialmente si el valor que se prueba es una expresión. Entender que dos expresiones complejas son idénticas puede ser un ejercicio no trivial. Entender que dos expresiones complejas DEBEN SER idénticas aunque no lo sean es aún más difícil.
Ni siquiera era consciente de que había un operador intermedio. Al mirarlo por primera vez, no estaba 100% claro si sería inclusivo o exclusivo. Adiviné correctamente, pero dado que las respuestas dicen que no hay diferencia de rendimiento, me quedaría con la segunda versión para que quede más clara. Sin embargo, soy el tipo de persona que agregará paréntesis donde no son necesarios solo para asegurarse de que no haya ningún malentendido cuando otra persona lea mi código. – drs9222