Posso trocar DateTime por Date?
Essa semana estou revisando meus arquivos que uso no treinamento de SQL Server que ministro, e tem um tópico onde falo da importancia de escolher os datatypes corretos para as colunas de nossas tabelas.
Isso é, quando possível, trocar BigInt por Integer, Integer por SmallInt, SmallInt por TinyInt e por ai vai…
Foi ai que cheguei na seguinte situação:
Muitas vezes podemos trocar DateTime por SmallDateTime, pois raramente precisamos dos segundos na data, e muitas vezes precisamos apenas da data, nem precisamos da hora. Isso me leva a dizer o seguinte, podemos trocar DateTime por Date, certo?…
Desta forma ganhariamos 5 bytes de espaço para cada valor gravado na coluna, pois o DateTime ocupa 8 bytes contra apenas 3 do Date. Bom dito isso chegamos onde eu queria, me diga uma coisa.
Veja que a consulta abaixo retorna:
DECLARE @Data DateTime
SET @Data = NULL
SELECT ISNULL(@Data, 0)
Ou seja, o SQL Server entende que 0 significa 1900-01-01… interessante.
Agora vamos ver o que acontece quando trocamos a variavél para Date:
DECLARE @Data Date
SET @Data = NULL
SELECT ISNULL(@Data, 0)
Msg 206, Level 16, State 2, Line 3
Operand type clash: int is incompatible with date
Conclusão, se você estiver fazendo uma conversão implicita de 0 para datetime e trocar os datatype de sua tabela de DateTime para Date, pode ser que alguns erros comecem a acontecer no seu aplicativo.
Portanto fica ai a dica, cuidado…