O famoso "SELECT *" é um antigo problema dos DBAs.
Sempre tentamos convencer as pessoas a nunca utilizar, neste post mostrarei mais um problema causado por ele.
Para reproduzir o erro vamos criar um ambiente simples.

CREATE TABLE Produto (
   Nome varchar(10),
   Valor decimal(8,2),
   Data smalldatetime)
GO
 
INSERT INTO Produto
Values('Caneta', 12,'02/05/03'),('Caderno', 21, '06/07/08')
GO
 
CREATE VIEW VW_Produto
AS
SELECT * FROM Produto
GO


Durante um tempo, a maioria das tabelas sofrem alterações, por exemplo, inserção de campos em posições intermediárias.
Usando o Management Studio(SSMS), vamos criar uma coluna Categoria na posição 3.
  

Vamos inserir valores neste novo campo.
UPDATE Produto  SET Categoria = 'Papelaria'


Agora vamos testar
SELECT Nome, Valor, Data FROM Produto
SELECT Nome, Valor, Data FROM VW_Produto


 
Veja que o campo Data trouxe o valor do campo Categoria.
Para corrigir este problema podemos utilizar o comando sp_refreshview.
Exemplo:
EXEC sp_refreshview 'VW_Produto'

Para evitar este problema, jamais use o "SELECT *" dentro de uma View.
Para te forçar a isto use a cláusula "WITH SCHEMABINDING" na criação das views, pois ela não deixará usar o "SELECT *"
O exemplo abaixo irá gerar um erro:
CREATE VIEW VW_Produto
WITH SCHEMABINDING
AS
Select * From Produto