WHERE IN requer que o conjunto de valores seja especificado literalmente na consulta, não como um único valor contendo uma string delimitada por vírgulas. Se você escrever:WHERE 6 IN (a.allowed_activity)
ele tratará
a.allowed_activity como um único valor e compare-o com 6 , não como um conjunto de vários valores a serem pesquisados. FIND_IN_SET pesquisa uma string delimitada por vírgulas para o valor. Outra maneira de visualizá-lo é que
IN é um atalho para vários = testes combinados com OR :WHERE x IN (a, b, c, d)
é curto para
WHERE x = a OR x = b OR x = c OR x = d
Ao reescrevê-lo assim, você pode ver claramente por que ele não funcionará com uma coluna contendo uma string delimitada por vírgulas. Simplesmente traduz
WHERE 6 IN (a.allowed_activity)
para:
WHERE 6 = a.allowed_activity