At first glance they seem quite similar but they aren’t. Joining with multiple conditions can result in a different dataset than joining and filtering (where statement).
For example:
SELECT * FROM customer
JOIN order ON customer.id = order.customerid
WHERE customer.id = 10
Will return all orders for customer ID 10
SELECT * FROM customer
JOIN order ON customer.id = order.customerid AND order.id = 10
Will return ALL customers but only order details for customer 10 will be joined, the rest will be blank (depending on join method used)
If you’re using INNER JOIN then yes you can use either and the SQL optimiser will change the query for the best execution plan.
If you’re using OUTER JOIN then the returned dataset will contain all customers, every customer apart from id = 10 will have NULL entries