WHERE PATINDEX ('%pattern%',expression) !=0
Si se encuentra un patrón, PATINDEX devuelve un valor distinto de cero y debe hacer una comparación en la cláusula WHERE. A WHERE
La cláusula debe ir seguida de una operación de comparación que devuelve verdadero/falso.
Puede ser que esté usando PATINDEX sin hacer la comparación y es por eso que el mensaje de error muestra una expresión no booleana cerca de la cláusula WHERE.
Para buscar el patrón learner_code con carácter comodín
WHERE PATINDEX ('%' + CAST(learner_code AS VARCHAR) +'%',examCodes) !=0