Acredito que a resposta esteja incorreta: select c1.id, c1.valor, c2.id, c2.valor from compras c1, compras c2 where c1.valor = c2.valor;
Como resultado desta consulta, traríamos o mesmo registro dos dois lados, como por exemplo: 1 | 50 | 1 | 50
Acredito que a resposta correta seja:
SELECT c1.id, c1.valor, c2.id, c2.valor FROM compras c1, compras c2 WHERE c1.valor = c2.valor AND c1.id != c2.id
Adicionando a condição c1.id != c2.id garantimos que os registro sejam diferentes, apenas com o valor igual.