-
They do different things. Use
INSERTwhen the table exists. UseSELECT INTOwhen it does not. -
Yes.
INSERTwith no table hints is normally logged.SELECT INTOis minimally logged assuming proper trace flags are set. -
In my experience
SELECT INTOis most commonly used with intermediate data sets, like#temptables, or to copy out an entire table like for a backup.INSERT INTOis used when you insert into an existing table with a known structure.
EDIT
To address your edit, they do different things. If you are making a table and want to define the structure use CREATE TABLE and INSERT. Example of an issue that can be created: You have a small table with a varchar field. The largest string in your table now is 12 bytes. Your real data set will need up to 200 bytes. If you do SELECT INTO from your small table to make a new one, the later INSERT will fail with a truncation error because your fields are too small.