I agree with just about all the answers except certain performance claims. If you are actually going to use all the columns in the table, I'd argue the SELECT * version is a smidgen faster. Here's why:
Take these two queries on a table where there is a unique index on (id,x):
SELECT x,y,z,w FROM tab WHERE id='abc' ORDER BY s
SELECT x,y,z,w FROM tab WHERE id='abc'
AND x in ('a','b','c','d','e','f','g','h',...)
ORDER BY ('a','b','c','d','e','f','g','h',...)
Which is faster? If the 'x in' clause names all the values for x in the table for id 'abc' then the first query is probably faster. Now let's rename these fields:
SELECT field_name, field_type, field_offset, field_len
FROM internal_field_catalog
WHERE table_name = 'abc'
ORDER BY field_order
So when retrieving the data, the SELECT * allows the engine to do (the equivalent of) a single memcpy to move the row data to the result set and when retrieving the field data it probably is selected faster.
All I'm saying is there is an edge case where SELECT * is perfectly useful and probably faster. One reason you might always need all columns from a table is when storing object persistence in an RDBMS (for some reason). To every rule of thumb there is an exception.