Dos cosas:
1) Esta parte del código debe estar devolviendo más de un registro:
Por lo que evidentmente ese INNER JOIN está leyendo una relación 1:N o N:N. En cualquier caso, el problema es que los parámetros no permiten discriminar un único registro, como exige la sintaxis.
2) Este bloque es ineficiente:
Cuando tienes que hacer algo así es muchísimo más simple y eficiente crear una tabla con las categorías, donde tengas las decripción e identificador de cada una, y realizar un INNER JOIN que devuelva ese dato.
Además, eso aporta flexibilidad al sistema, porque te permite agregar categorías neuvas sin necesidad de tener que editar todos y cada uno de los SP y las consultas donde usas esta sintaxis tan tosca.
Esto no lo invento yo, es la forma en que se resuelven siempre estas cosas en los sistemas diseñados de modo eficiente.