Observe o script SQL a seguir. CREATE TABLE TB_PROC (ID_PROC int , NM_JUIZ VARCHAR2(50), PR_FASE VARCHAR2(50)); INSERT INTO TB_PROC (ID_PROC, NM_JUIZ, PR_FASE) VALUES (1, 'A', 'CONTESTACAO'); INSERT INTO TB_PROC (ID_PROC, NM_JUIZ, PR_FASE) VALUES (2, 'A', 'INSTRUCAO'); INSERT INTO TB_PROC (ID_PROC, NM_JUIZ, PR_FASE) VALUES (3, 'B', 'INSTRUCAO'); INSERT INTO TB_PROC (ID_PROC, NM_JUIZ, PR_FASE) VALUES (4, 'A', 'RECURSAL'); INSERT INTO TB_PROC (ID_PROC, NM_JUIZ, PR_FASE) VALUES (5, 'B', 'CONTESTACAO'); SELECT COUNT(*) FROM TB_PROC WHERE NM_JUIZ = 'B' AND PR_FASE <> 'RECURSAL'; O resultado da execução do script SQL apresentado é:
- A)1
Errada, porque apenas um registro nao satisfaria as duas condicoes do WHERE, e aqui ha dois.
- B)2
Certa, pois existem exatamente duas linhas com NM_JUIZ = 'B' e PR_FASE diferente de 'RECURSAL'.
- C)3
Errada, porque isso incluiria uma linha a mais do que a consulta realmente retorna.
- D)4
Errada, pois quatro linhas nao atendem simultaneamente ao filtro aplicado.
- E)5
Errada, porque todas as linhas da tabela nao passam pela restricao do WHERE.
Gabarito: B
Nesta questao, o ponto central eh simples: o comando SELECT COUNT(*) conta quantas linhas atendem ao filtro do WHERE. Aqui, voce nao esta somando valores nem contando apenas uma coluna especifica, mas sim as linhas inteiras que passam pela condicao. O filtro traz duas exigencias ao mesmo tempo: NM_JUIZ = 'B' e PR_FASE <> 'RECURSAL'. O operador <> significa diferente de, entao entram apenas os registros do juiz B que nao estejam na fase recursal. Pelos dados inseridos, isso ocorre em duas linhas: o processo 3, com juiz B e fase INSTRUCAO, e o processo 5, com juiz B e fase CONTESTACAO. Como o processo 4 tem juiz A, ele nao entra, mesmo estando em RECURSAL. Por isso, o resultado eh 2. Em SQL, a banca gosta bastante de testar leitura atenta de filtros lógicos e interpretacao do operador de desigualdade, sem nenhuma magia escondida.