Estoy de acuerdo con casi todas las respuestas excepto ciertas afirmaciones de rendimiento. Si va a utilizar todas las columnas de la tabla, yo diría que la versión SELECT * es mucho más rápida. He aquí por qué:
Tome estas dos consultas en una mesa donde hay un índice único en (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',...)
que es más rápido? Si la cláusula 'x in' nombra todos los valores para x en la tabla para id 'abc', entonces la primera consulta es probablemente más rápida. Ahora vamos a cambiar el nombre de estos campos:
SELECT field_name, field_type, field_offset, field_len
FROM internal_field_catalog
WHERE table_name = 'abc'
ORDER BY field_order
Así que cuando se recuperan los datos, el SELECT * permite que el motor para hacerlo (el equivalente a) un único establecimiento de memoria para mover los datos de fila para el conjunto de resultados y cuando se recuperan los datos de campo es probable que se seleccione más rápido.
Todo lo que digo es que hay un caso de borde donde SELECT * es perfectamente útil y probablemente más rápido. Una razón por la que siempre podría necesitar todas las columnas de una tabla es cuando se almacena la persistencia de objetos en un RDBMS (por alguna razón). Para cada regla general hay una excepción.
Esto puede calificar para "la pregunta SO más repetida". :> D – dkretz