I'm of the don't use select * school, too. First, you often do not need every field in the table. To return data you don't need is inefficent both for the SQL Server and for the network.
Second, anytime you have an inner join, select * is automatically inefficent as two column have exactly the same data.
Third, Select * in a union query is actively dangerous. In a union query, the fields must be in the correct order to match up and must have exactly the same number of fields. Anyone adds a field to one of the tabel or rearranges them in Enterprise Manager and your query no longer works. Same with Select * in the select part of an insert statment.
Fourth, and this is personal opinion, I believe it leads to the inappropriate reuse of code. Write one stored procedure with Select * and then use it in 12 differnt places even though each of those places wants a different subset of the data. No problem at design time. It was fast and I'm on to the next thing. But wait til there are 12 million records in the table and see how slow your system is.
Now mind, I have no objections to the reuse of code when done appropriately. But when code reuse makes the application run less efficiently, then it is inappropriate no matter how much coding time it saves you.
Some people like to use Select * because it saves them typing time. To this I say that you should use the object browser and drag the column names over from it. All you have to do is have the table expanded and the columns expanded within that. Then dragging the word "columns" will drag all the columns at once. It puts them all on one line, so I take the extra few seconds to break that down to lines I don't have to scroll across to read. Yeah this is afew seconds slower than typing Select *, but much faster and more accurate than typing all the column names. Making an application permanently slower because you are too lazy to spend a few extra seconds in creation of the program is the mark of a poor programmer.
Questions about posting. See faq183-874