FIND_IN_SET () vs IN ()

Eu tenho 2 tabelas no meu banco de dados. Um é para pedidos, e um é para empresas.

Pedidos possui esta estrutura:

OrderID     |     attachedCompanyIDs
------------------------------------
   1                     1,2,3
   2                     2,4

E a empresa tem essa estrutura:

CompanyID      |        name
--------------------------------------
    1                 Company 1
    2                 Another Company
    3                 StackOverflow
    4                 Nothing

Para obter os nomes das empresas de um pedido, posso fazer uma consulta como:

SELECT name FROM orders,company
WHERE orderID = 1 AND FIND_IN_SET(companyID, attachedCompanyIDs)

Essa consulta funciona bem, mas a consulta a seguir não.

SELECT name FROM orders,company
WHERE orderID = 1 AND companyID IN (attachedCompanyIDs)

Por que a primeira consulta funciona, mas não a segunda?

A primeira consulta retorna:

name
---------------
Company 1
Another Company
StackOverflow

A segunda consulta retorna apenas:

name
---------------
Company 1

Por que isso ocorre, por que a primeira consulta retorna todas as empresas, mas a segunda consulta retorna apenas a primeira?

questionAnswers(6)

yourAnswerToTheQuestion