The following quoted text came from a deleted blog post at infogeoblog.wordpress.com which was called **Geo-Processing in QGIS**.

Given two input shapes:

> **Clip** creates a new shape based on the area of the input layer that is overlapped by the clipping layer. It is similar to the intersection but differs in that the attributes of the chosen layer only are copied to the new feature. It is similar to MapInfo’s Erase Outside function.
>
> **Difference** creates a new feature based on the area of the input layer that isn’t overlapped by the clipping layer. It is similar to MapInfo’s Erase function.

Basically, **Clip** keeps the area of the "clipee" that overlaps the "clipper", while **Difference** keeps the area of the "clipee" that does **not** overlap the "clipper". I use the same terms for clarity even though we aren't clipping *per se* with the Difference tool.

Side note, **Difference** in QGIS is equivalent to **Erase** in ArcGIS as well.