Tal vez en alguna ocasión, necesites realizar una consulta a una base de datos SQL Server, comparando un campo de texto con un valor, pero sin tener en cuenta mayúsculas y minúsculas; o bien sin diferenciar entre vocales acentuadas de sin acentuar.

La solución es tremendamente sencilla, aunque no intuitiva ni fácil de descubrir. Se trata de utilizar la cláusula COLLATE, para forzar a SQL Server a que use las transformaciones de caracteres (intercalaciones en la traducción del MSDN) que nos interesen.

El truco está en que COLLATE, no solamente permite especificar juegos de caracteres (Modern_Spanish, Latin1_General, …), sino además agregar reglas que indican como tratar esa expresión. Entre las reglas están CI o CS (Case Ignore o Case Sensitive), y AI o AS (Accent Ignore o Accent Sensitive).

Así podríamos definir la collation Modern_Spanish_CS_AI, que utiliza juego de caractéres español, diferenciando mayúsculas de minúsculas, pero sin diferenciar acentos.

Un ejemplo más claro de esto, sería la típica consulta SQL para buscar en una base de datos de libros, sin tener en cuenta la capitalización, ni la acentuación:

SELECT
*
FROM
t_mstr_libro
WHERE
libro_autor + ' ' +
libro_titulo + ' ' +
libro_texto
LIKE
'%TEXTO A BUSCAR%'
COLLATE Modern_Spanish_CI_AI

La query, busca en la tabla maestra de libros, y concatena los campos sobre los que queremos buscar (autor, título y texto), aplicando el operador de comparación LIKE contra las búsqueda que nos interesa. En ese caso es "TEXTO A BUSCAR". La expresión se complementa forzando el COLLATE a español moderno, sin diferenciar capitalización (CI) ni acentuación (AI).