Questão de Banco de Dados — SQL Server — VUNESP 2023
Banco de Dados›SQL Server
Código
vu197033
Banca
VUNESP
Órgão
CIJUN
Ano
2023
Cargo
Ana ( )
Considerando o sistema gerenciador de banco de dados MS SQL Server 2022, quando um operador necessita combinar duas expressões com tipos de dados distintos, o tipo de dados com precedência mais baixa será convertido para o tipo de dados de maior precedência. Dessa forma, é correto afirmar que o tipo de dados
Adatetime2 tem maior precedência que o tipo de dados datetime.
Bsmallmoney tem maior precedência que o tipo de dados money.
Cint tem maior precedência que o tipo de dados bigint.
Dchar tem maior precedência que o tipo de dados varchar.
Efloat tem menor precedência que o tipo de dados real.
Revelar gabarito e comentário▾
GabaritoA — datetime2 tem maior precedência que o tipo de dados datetime.
Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.
Precedência de tipos de dados no SQL Server
Gabarito: letra A. No SQL Server, quando duas expressões de tipos distintos são combinadas, o tipo de menor precedência é convertido implicitamente para o de maior precedência. A alternativa A está correta porque datetime2 tem precedência maior que datetime — uma regra específica da tabela de precedência de tipos de dados do SQL Server, que a banca cobra de forma literal.
A precedência de tipos de dados é um conceito fundamental para entender a conversão implícita no SQL Server. Quando você escreve uma expressão que mistura tipos diferentes — por exemplo, somar um int com um bigint, ou comparar uma coluna datetime com uma datetime2 — o SQL Server precisa decidir qual tipo será o resultado da operação. A regra é simples: o tipo com precedência mais baixa é convertido para o tipo com precedência mais alta, e essa conversão acontece de forma automática, sem que o programador precise usar CAST ou CONVERT.
Essa tabela de precedência é fixa e documentada pela Microsoft. Ela não segue uma lógica intuitiva de "tamanho" ou "precisão" — é uma lista ordenada que deve ser memorizada. Por exemplo, int tem precedência menor que bigint, mas float tem precedência maior que decimal. A banca VUNESP explora exatamente esse caráter de decoreba: o candidato que tenta deduzir a ordem pela lógica acaba errando, porque a ordem oficial é específica do SQL Server.
Para entender a pegadinha, é preciso conhecer a ordem correta de precedência (da maior para a menor): user-defined data types (maior), sql_variant, float, decimal, money, smallmoney, bigint, int, smallint, tinyint, bit, ntext, text, image, timestamp, uniqueidentifier, nvarchar, nchar, varchar, char, varbinary, binary, datetimeoffset, datetime2, smalldatetime, datetime, date (menor). Repare que datetime2 está ACIMA de datetime na lista — é exatamente o que a alternativa A afirma. Já money está acima de smallmoney, bigint acima de int, e float acima de real (que é um alias para float de menor precisão).
A pegadinha central desta questão é a inversão: a banca troca a ordem de precedência em quase todas as alternativas, fazendo o candidato achar que o tipo "maior" ou "mais preciso" tem precedência maior. Mas a precedência não segue essa lógica — ela é uma lista fixa. Por exemplo, smallmoney tem precedência MENOR que money, e char tem precedência MENOR que varchar. O candidato que não memorizou a tabela oficial cai nas alternativas B, C, D e E.
Guarde a ordem exata da tabela de precedência — é nela que as alternativas se dividem. A alternativa A é a única que espelha corretamente a ordem oficial.
Alternativa A — ✅ Correta ⟵ GABARITO
A alternativa afirma que datetime2 tem maior precedência que datetime. Isso está correto segundo a tabela oficial de precedência de tipos de dados do SQL Server. Na lista, datetime2 aparece acima de datetime, o que significa que, em uma operação que combine os dois, o valor datetime será convertido para datetime2. Essa é uma regra específica e não intuitiva — muitos candidatos acham que datetime (mais antigo) teria precedência, mas a ordem oficial é outra.
Alternativa B — ❌ Incorreta
Afirma que smallmoney tem maior precedência que money. Isso está errado — a ordem é invertida. Na tabela oficial, money tem precedência MAIOR que smallmoney. Ou seja, em uma operação que combine os dois, o smallmoney é convertido para money, não o contrário. A banca trocou a ordem para confundir.
Alternativa C — ❌ Incorreta
Afirma que int tem maior precedência que bigint. Isso está errado — a ordem é invertida. Na tabela oficial, bigint tem precedência MAIOR que int. Em uma operação que combine int e bigint, o int é convertido para bigint. A lógica aqui até faria sentido (bigint é maior), mas a banca inverteu a relação.
Alternativa D — ❌ Incorreta
Afirma que char tem maior precedência que varchar. Isso está errado — a ordem é invertida. Na tabela oficial, varchar tem precedência MAIOR que char. Em uma operação que combine os dois, o char é convertido para varchar. A banca explora a confusão entre tamanho fixo e variável, mas a precedência não segue essa lógica.
Alternativa E — ❌ Incorreta
Afirma que float tem menor precedência que real. Isso está errado — a ordem é invertida. Na tabela oficial, float tem precedência MAIOR que real. Na verdade, real é um alias para float(24), que tem menor precisão, e por isso fica abaixo na ordem de precedência. Em uma operação que combine os dois, o real é convertido para float.
NÃO CAIA NESSA!
A banca adora inverter a ordem de precedência para confundir. Em quase todas as alternativas, ela troca o tipo que tem precedência maior pelo que tem menor. A pegadinha é que a precedência NÃO segue a lógica de "tamanho" ou "precisão" — é uma lista fixa e específica do SQL Server. Por exemplo, datetime2 tem precedência maior que datetime, mas char tem precedência menor que varchar. Memorize a tabela oficial e você enxerga essas inversões de longe 💪
PEGA ESSA DICA!
Para decorar a ordem de precedência, foque nos pares que a banca mais cobra: datetime2 > datetime, money > smallmoney, bigint > int, varchar > char, float > real. Monte uma tabela com esses pares e revise antes da prova. A VUNESP adora cobrar essa lista de forma literal.