Ваш запрос не возвращает записей, просто потому, что ни одна запись в product_stocks не может иметь product_id 1 и 9 одновременно. Если вы хотите использовать дополнительный выбор, чтобы ограничить идентификаторы компании, то один из способов сделать это так:
SELECT * FROM companies
WHERE companies.id IN (
SELECT ps1.company_id
FROM product_stocks ps1
INNER JOIN product_stocks ps9
ON ps1.company_id = ps9.company_id
WHERE ps1.product_id = 1 AND ps9.product_id = 9)
В порядке пояснения, внутреннее (само) соединение в подпункте выбора гарантируется, что будут возвращены только идентификаторы компаний, которые имеют оба product_ids 1 и 9.