Select-Object will select the object properties that you want to see. So it removes all properties you did not specify, but it always returns an object:
Often, you are not interested in an object but prefer the content of an object property. When you specify -ExpandProperty, Select-Object will actually take an object and replace the entire object with the content of one of its properties:
This is extremely useful and roughly the equivalent of this:
However, you should note that -ExpandProperty has a bug in v2 that can occur with certain object types. So if the result returned by -ExpandProperty raises strange exceptions when you process it, you should use the Foreach-Object approach, which always works right.