Your method finds one product with the minimum price. If there are more than one, then you are missing them.
So, the more general solution is to use something a lot like your query as a subquery:
select p.*
from products p join
(SELECT UnitPrice
FROM products
ORDER BY UnitPrice
LIMIT 1
) pmin
on p.UnitPrice = pmin.UnitPrice;
Actually, the subquery would more commonly be written:
(SELECT min(UnitPrice)
FROM products
) pmin
Both produce the same answer.