TSQL – ALGUNOS | CUALQUIERA, ¿por qué son iguales con diferentes nombres?

Según la descripción de MSDN BOL (Libros en línea) en ALGUNOS | CUALQUIER (Transact-SQL) ,

ALGUNOS y CUALQUIERA son equivalentes.

Tiene sentido usar ALGUNOS | CUALQUIER para hacer una consulta más legible.

Pero, ¿ es esa la única razón por la que hay dos palabras key en TSQL en las que sirven exactamente para el mismo propósito?

¿Hay alguna razón histórica por la que tienen la misma funcionalidad?

Del estándar SQL ANSI-92 (busque "ALGUNOS"). También aquí, text

<some> ::= SOME | ANY 

Sospecho que la razón es que el lenguaje SQL viene de principios de los años setenta, pero no tenía estándar hasta 1986. El estándar habría tomado elementos de los dialectos SQL existentes, por lo que tenemos esta ALGUNA / CUALQUIER anomalía.

Este artículo de blog de Brad Schulz explica algunas diferencias: " TODO, CUALQUIERA, y ALGUNO: Los Tres Chiflados "

ALGUNOS y CUALQUIERA son equivalentes. CUALQUIERA es la syntax ANSI. Por qué ALGUNOS son presentados, no lo sé. Podría ser debido a la legibilidad, pero las dos oraciones siguientes son fáciles de entender.

 WHERE 5000 < ANY(SELECT Price FROM dbo.items) WHERE 5000 < SOME(SELECT Price FROM dbo.items) 

Aunque, el server SQL en ambos casos ejecutará:

 WHERE EXISTS(SELECT * FROM dbo.items WHERE price>5000) 

que también es muy fácil de entender

"¿Hay alguna razón histórica por la que tienen la misma funcionalidad?"

Responderé a la pregunta real … Al principio fue TODO y CUALQUIERA.

TODO es un cuantificador universal, mientras que CUALQUIERA debía ser siempre un cuantificador existencial. Sin embargo, en inglés, ANY también se utiliza con frecuencia como un cuantificador universal. "Puedo vencer a CUALQUIERA de ustedes" no es sinónimo de "Puedo vencer a ALGUNOS de ustedes". De hecho, es sinónimo de "Puedo vencer a TODOS ustedes".

Con CUALQUIER ser confuso, ALGUNO ha sido introducido como un sinónimo más confiable para CUALQUIERA con la adopción del estándar SQL-92. Se suponía que CUALQUIERA debía conservarse durante un time solo por compatibilidad con versiones anteriores del producto. Pero todavía lo tenemos hoy.

ALGUNOS y CUALQUIERA son equivalentes en el estándar SQL-92, por lo tanto, si bien no responde su pregunta para señalarlo, sí indica que el historial data de un largo path.

Recuerde que algunos productos de bases de datos han existido durante casi tres décadas. Los proveedores como Oracle, IBM y Microsoft siempre han incluido características en sus productos que posteriormente se han incorporado al estándar ANSI.

A veces, estas características habían sido desarrolladas por varios proveedores de forma independiente, por lo que el estándar o el proveedor tenían que soportar sinónimos para palabras key. Por ejemplo, Oracle tenía SELECT DISTINCT mucho antes de que ANSI especificara SELECT UNIQUE . Oracle es compatible con ambos usos.

No sé si se aplica un escenario similar en el caso de ALGUNOS y CUALQUIERA. Pero parece probable.