El operador = es T-SQL no es tanto "igual" como "son la misma palabra / frase, de acuerdo con la intercalación del contexto de la expresión", y LEN es "el número de caracteres en la palabra / frase". Ninguna intercalación trata los espacios en blanco finales como parte de la palabra / frase que los precede (aunque sí tratan los espacios en blanco iniciales como parte de la cadena que preceden).
Si necesita distinguir 'esto' de 'esto', no debe usar el operador "son la misma palabra o frase" porque "esto" y "esto" son la misma palabra.
La idea de way = works es la idea de que el operador de igualdad de cadenas debe depender del contenido de sus argumentos y del contexto de intercalación de la expresión, pero no debe depender de los tipos de argumentos, si ambos son tipos de cadena .
El concepto de lenguaje natural de "estas son la misma palabra" no suele ser lo suficientemente preciso como para que pueda ser capturado por un operador matemático como =, y no existe el concepto de tipo de cadena en el lenguaje natural. El contexto (es decir, la colación) importa (y existe en el lenguaje natural) y es parte de la historia, y las propiedades adicionales (algunas que parecen extravagantes) son parte de la definición de = para que quede bien definido en el mundo antinatural de datos.
En el tema del tipo, no querrá que las palabras cambien cuando se almacenan en diferentes tipos de cadenas. Por ejemplo, los tipos VARCHAR (10), CHAR (10) y CHAR (3) pueden contener representaciones de la palabra 'gato' y? = 'gato' debería permitirnos decidir si un valor de cualquiera de estos tipos contiene la palabra 'gato' (con cuestiones de caso y acento determinados por la colación).
Respuesta al comentario de JohnFx:
Consulte Uso de datos char y varchar en Libros en pantalla. Citando de esa página, el énfasis es mío:
Cada valor de datos char y varchar tiene una intercalación. Las intercalaciones definen atributos como los patrones de bits utilizados para representar cada carácter, las
reglas de comparación y la sensibilidad a mayúsculas y minúsculas o acentos.
Estoy de acuerdo en que podría ser más fácil de encontrar, pero está documentado.
También vale la pena señalar que la semántica de SQL, donde = tiene que ver con los datos del mundo real y el contexto de la comparación (a diferencia de algo sobre los bits almacenados en la computadora) ha sido parte de SQL durante mucho tiempo. La premisa de RDBMS y SQL es la representación fiel de datos del mundo real, de ahí su soporte para las intercalaciones muchos años antes de que ideas similares (como CultureInfo) ingresaran al ámbito de los lenguajes tipo Algol. La premisa de esos lenguajes (al menos hasta hace muy poco) era la resolución de problemas en ingeniería, no la gestión de datos comerciales. (Recientemente, el uso de lenguajes similares en aplicaciones que no son de ingeniería, como la búsqueda, está haciendo algunos avances, pero Java, C #, etc. aún están luchando con sus raíces no comerciales).
En mi opinión, no es justo criticar a SQL por ser diferente de "la mayoría de los lenguajes de programación". SQL fue diseñado para admitir un marco para el modelado de datos comerciales que es muy diferente de la ingeniería, por lo que el lenguaje es diferente (y mejor para su objetivo).
Diablos, cuando se especificó SQL por primera vez, algunos lenguajes no tenían ningún tipo de cadena incorporado. Y en algunos idiomas aún, el operador igual entre cadenas no compara datos de caracteres en absoluto, ¡sino que compara referencias! No me sorprendería si en otra década o dos, la idea de que == depende de la cultura se convierta en la norma.