SQL JOIN: what is the difference between WHERE clause and ON clause?

What is the difference and what should go in each? If I understand the theory correctly, the query optimizer should be able to use both interchangeably. (Note: this question is not a duplicate of