Soluções da Delegacia SQL

Inquérito 008, "A folha que ficou de fora": solução passo a passo

O boletim

Em 24 de junho o Ministério Público requisitou a remessa do inquérito 14 em trinta dias. O prazo vence na quinta-feira.

O inquérito 14 é de 22 de agosto de 1997: a Kombi escolar que saiu da pista no quilômetro 11 da Estrada do Café com dezenove crianças dentro. Nove se machucaram. Não morreu ninguém. Foi arquivado sem conclusão em 1998.

O doutor mandou imprimir. O SISPOL respondeu que o registro 14 não existe.

Ele abriu sindicância, protocolo 400, e escreveu a frase que virou a ordem de serviço: "quero saber quem tirou o que do arquivo desta delegacia, quando, e com que autorização".

Seu Jaime pediu para você abrir o caderno em cima da mesa e disse que agora não é mais palpite: são oito números anotados por você desde março. Disse também que até hoje a máquina só respondeu uma pergunta de cada vez, sobre uma gaveta de cada vez, e que a partir de agora vai ser preciso pedir duas gavetas na mesma frase — porque o nome de quem fez isso não está escrito em lugar nenhum: está espalhado entre três gavetas que nunca se falaram.

Seis pessoas deram depoimento à sindicância, de dentro e de fora desta casa. Seu Jaime deu o dele antes de ser chamado. O doutor deu o dele também, e pediu que ficasse escrito.

O que o caso ensina: INNER JOIN.

Pergunta 1

Comece pelo que sobrou. Traga do livro do balcão todo papel que pediu o inquérito 14, na ordem em que chegaram.

Ver as dicas do jogo
  1. Comece pelo que sobrou. Traga, da tabela `protocolo`, o `id`, a `data`, o `tipo`, o `assunto` e o `requerente` de todo papel cujo `assunto` fala do inquérito 14, em ordem de `data`. O livro escreve inquérito com acento.
  2. O pedaço 'inquérito 14', com acento, no meio do `assunto`: LIKE com porcento dos dois lados. A fila é pela `data`.
  3. Escreva: `SELECT id, data, tipo, assunto, requerente FROM protocolo WHERE assunto LIKE '%inquérito 14%' ORDER BY data;`
Ver a consulta que resolve
SELECT id, data, tipo, assunto, requerente FROM protocolo WHERE assunto LIKE '%inquérito 14%' ORDER BY data;

LIKE com porcento dos dois lados acha o pedaço no meio do texto, e o acento conta: 'inquerito' sem acento não é o mesmo pedaço que 'inquérito'. É o LIKE do caso 3 e o ORDER BY do caso 5, que continuam valendo.

Resultado

id data tipo assunto requerente
247 2002-07-29 pedido Pedido de cópia do inquérito 14 12
345 2003-03-14 pedido Pedido de cópia integral do inquérito 14 13
370 2003-05-19 pedido Pedido de vista dos autos do inquérito 14 13
378 2003-06-06 oficio Notificação do Ministério Público sobre o inquérito 14 0
387 2003-06-24 requisicao Requisição do Ministério Público: remessa do inquérito 14 em 30 dias 0

Pergunta 2

Antes de juntar uma gaveta com a outra, conheça a dos logins: traga cada login do SISPOL.

Ver as dicas do jogo
  1. Antes de juntar uma gaveta com a outra, conheça a dos logins. Traga, da tabela `usuario`, o `id`, o `login`, o `pessoa_id`, o `cargo` e o `ativo` de cada login do SISPOL.
  2. É uma gaveta de sete linhas e você quer todas: não precisa de condição.
  3. Escreva: `SELECT id, login, pessoa_id, cargo, ativo FROM usuario;`
Ver a consulta que resolve
SELECT id, login, pessoa_id, cargo, ativo FROM usuario;

A gaveta `usuario` é uma ponte. De um lado, o `id` do login, que é o número que o livro de acesso anota em cada operação; do outro, o `pessoa_id`, que é o número da ficha na gaveta `pessoa`. Os dois números nunca são iguais, e é por isso que na próxima pergunta as gavetas vão ter de conversar em vez de você adivinhar.

Resultado

id login pessoa_id cargo ativo
11 jfontenele 1 escrivão 1
12 wbraganca 2 delegado 1
13 sbortolotto 3 escrevente 1
14 vprestes 4 investigador 1
15 gandrade 5 investigador 1
16 nvidal 7 delegado 0
17 tecnico 0 suporte SISPOL 1

Pergunta 3

O SISPOL anota cada baixa no livro de acesso, só com o número do login. Traga cada baixa, com a hora, o número da ocorrência e o login escrito por extenso, na ordem em que aconteceram.

Ver as dicas do jogo
  1. O SISPOL anota cada baixa no livro de acesso, a tabela `acesso`, mas guarda só o número do login. Traga o `momento`, a `ocorrencia` e o `login`, que está na tabela `usuario`, de toda linha de `acesso` com a `operacao` igual a baixa, em ordem de `momento`.
  2. `FROM acesso INNER JOIN usuario ON usuario.id = acesso.usuario_id` junta as duas gavetas. As duas têm coluna `id`: escreva o nome da gaveta na frente de cada coluna, e peça `acesso.operacao = 'baixa'`.
  3. Escreva: `SELECT acesso.momento, acesso.ocorrencia, usuario.login FROM acesso INNER JOIN usuario ON usuario.id = acesso.usuario_id WHERE acesso.operacao = 'baixa' ORDER BY acesso.momento;`
Ver a consulta que resolve
SELECT acesso.momento, acesso.ocorrencia, usuario.login FROM acesso INNER JOIN usuario ON usuario.id = acesso.usuario_id WHERE acesso.operacao = 'baixa' ORDER BY acesso.momento;

`INNER JOIN` junta duas tabelas numa só, linha com linha, e o `ON` diz o par: cada linha de `acesso` casa com a linha de `usuario` cujo `id` é o `usuario_id` dela. Sem o `ON`, a máquina casa cada baixa com cada um dos sete usuários, e as treze linhas viram noventa e uma. E como `acesso` e `usuario` têm, as duas, uma coluna `id`, a coluna vai com o nome da tabela na frente (`usuario.id`): sem isso a máquina responde ambiguous column name, que quer dizer que ela não sabe de qual das duas você está falando.

Resultado

momento ocorrencia login
2002-03-19 21:48 71 wbraganca
2002-03-19 21:51 96 wbraganca
2002-03-19 21:55 131 wbraganca
2002-08-12 20:31 152 wbraganca
2002-10-24 21:12 177 wbraganca
2002-10-24 21:16 179 wbraganca
2002-11-05 20:57 27 wbraganca
2003-03-21 21:03 212 wbraganca
2003-05-26 20:44 226 wbraganca
2003-06-13 21:29 230 wbraganca
2003-06-30 22:58 233 wbraganca
2003-06-30 23:06 234 wbraganca
2003-06-30 23:14 14 wbraganca

Pergunta 4, a que o caso puxa no meio do caminho

O Seu Jaime quer ver quem mais veio a este balcão falar da Falcão e da escola. Traga os papéis sobre a Viação Falcão ou sobre transporte escolar, com o nome de quem trouxe cada um, em ordem de data.

Ver as dicas do jogo
  1. Volte à tabela `protocolo`. Traga os papéis cujo `assunto` fala da Viação Falcão ou do transporte escolar, em ordem de `data`: o `id`, a `data`, o `assunto`, a `ocorrencia` que o papel gerou e o `nome` de quem trouxe, tirado da tabela `pessoa`.
  2. `FROM protocolo INNER JOIN pessoa ON pessoa.id = protocolo.requerente`. Os dois pedaços do `assunto` vão com OR: `protocolo.assunto LIKE '%Falcão%' OR protocolo.assunto LIKE '%transporte escolar%'`, em ordem de `protocolo.data`.
  3. Escreva: `SELECT protocolo.id, protocolo.data, protocolo.assunto, protocolo.ocorrencia, pessoa.nome FROM protocolo INNER JOIN pessoa ON pessoa.id = protocolo.requerente WHERE protocolo.assunto LIKE '%Falcão%' OR protocolo.assunto LIKE '%transporte escolar%' ORDER BY protocolo.data;`
Ver a consulta que resolve
SELECT protocolo.id, protocolo.data, protocolo.assunto, protocolo.ocorrencia, pessoa.nome FROM protocolo INNER JOIN pessoa ON pessoa.id = protocolo.requerente WHERE protocolo.assunto LIKE '%Falcão%' OR protocolo.assunto LIKE '%transporte escolar%' ORDER BY protocolo.data;

`INNER JOIN` só traz a linha que acha par do outro lado. Papel com `requerente` zero é papel da própria casa, e zero não é `id` de ninguém na gaveta `pessoa`: esses papéis ficam fora do resultado, e sobra só o que foi trazido por gente.

Resultado

id data assunto ocorrencia nome
62 2001-05-22 Reclamação sobre transporte escolar — linha do Alto do Cruzeiro 71 Zulmira Caetano
110 2001-09-13 Reclamação de superlotação no transporte escolar — linha do sítio 96 Doralice Quirino da Mata
181 2002-02-26 Queixa de Marlene Sardinha contra a Viação Falcão 131 Marlene Sardinha
223 2002-06-04 Acidente sem vítimas — ônibus da Viação Falcão no km 11 da Estrada do Café 152 Osmar Trentini
277 2002-10-09 Reclamação sobre transporte escolar — linha do sítio, da Viação Falcão 179 Genésio Quirino da Mata
281 2002-10-21 Pedido de cópia das vistorias da frota da Viação Falcão 0 Lidiane Sardinha
285 2002-11-01 Pedido de certidão de ocorrências do veículo AJE-4477, da Viação Falcão 0 Lidiane Sardinha
347 2003-03-18 Perturbação do sossego — oficina da Viação Falcão de madrugada 212 Iracema Boaventura

Pergunta 5

Traga do livro de ponto quem estava na delegacia em cada uma das oito noites em que houve baixa, com o nome de cada um ao lado do número, noite por noite.

Ver as dicas do jogo
  1. Traga, da tabela `ponto`, a `data`, o `pessoa_id`, a `entrada`, a `saida` e a `situacao`, com o `nome` de cada pessoa ao lado, tirado da tabela `pessoa`, de todo mundo que bateu ponto na delegacia, o `local_id` 1, nas oito datas em que houve baixa, em ordem de `data`.
  2. `FROM ponto INNER JOIN pessoa ON pessoa.id = ponto.pessoa_id`; peça `ponto.local_id = 1` e as oito datas das baixas numa lista, depois de IN, na coluna `ponto.data`, e ordene por `ponto.data`.
  3. Escreva: `SELECT ponto.data, ponto.pessoa_id, pessoa.nome, ponto.entrada, ponto.saida, ponto.situacao FROM ponto INNER JOIN pessoa ON pessoa.id = ponto.pessoa_id WHERE ponto.local_id = 1 AND ponto.data IN ('2002-03-19', '2002-08-12', '2002-10-24', '2002-11-05', '2003-03-21', '2003-05-26', '2003-06-13', '2003-06-30') ORDER BY ponto.data;`
Ver a consulta que resolve
SELECT ponto.data, ponto.pessoa_id, pessoa.nome, ponto.entrada, ponto.saida, ponto.situacao FROM ponto INNER JOIN pessoa ON pessoa.id = ponto.pessoa_id WHERE ponto.local_id = 1 AND ponto.data IN ('2002-03-19', '2002-08-12', '2002-10-24', '2002-11-05', '2003-03-21', '2003-05-26', '2003-06-13', '2003-06-30') ORDER BY ponto.data;

O `JOIN` também serve só para pôr um nome ao lado de um número: o livro de ponto guarda `pessoa_id`, e a gaveta `pessoa` diz de quem é. O `IN` do caso 4 pede as oito datas de uma vez, e o `ORDER BY` põe as noites em fila. No plantão a saída fica em branco, porque o turno acaba no dia seguinte e o livro de 1978 nunca soube lidar com isso.

Resultado

data pessoa_id nome entrada saida situacao
2002-03-19 1 Jaime Fontenele de Abreu 08:00 17:30 normal
2002-03-19 2 Wilson Tadeu Bragança 08:10 18:05 normal
2002-03-19 3 Sirlei Aparecida Bortolotto 07:55 22:10 normal
2002-03-19 4 Valdemar Prestes 09:00 18:00 normal
2002-03-19 5 Getúlio Andrade 08:00 18:00 normal
2002-03-19 6 Aparecido Rangel 18:00 plantao
2002-08-12 1 Jaime Fontenele de Abreu 08:00 17:30 normal
2002-08-12 2 Wilson Tadeu Bragança 08:20 17:50 normal
2002-08-12 3 Sirlei Aparecida Bortolotto 08:00 21:05 normal
2002-08-12 4 Valdemar Prestes falta
2002-08-12 5 Getúlio Andrade 08:00 18:10 normal
2002-08-12 6 Aparecido Rangel 18:00 plantao
2002-10-24 1 Jaime Fontenele de Abreu 08:00 17:30 normal
2002-10-24 2 Wilson Tadeu Bragança externo
2002-10-24 3 Sirlei Aparecida Bortolotto 08:00 21:40 normal
2002-10-24 4 Valdemar Prestes 08:30 17:45 normal
2002-10-24 5 Getúlio Andrade externo
2002-10-24 6 Aparecido Rangel ferias
2002-11-05 1 Jaime Fontenele de Abreu 08:00 17:30 normal
2002-11-05 2 Wilson Tadeu Bragança 08:05 18:30 normal
2002-11-05 3 Sirlei Aparecida Bortolotto 08:00 21:20 normal
2002-11-05 4 Valdemar Prestes 09:10 18:20 normal
2002-11-05 5 Getúlio Andrade 08:00 18:00 normal
2002-11-05 6 Aparecido Rangel 18:00 plantao
2003-03-21 1 Jaime Fontenele de Abreu 08:00 17:30 normal
2003-03-21 2 Wilson Tadeu Bragança 08:15 18:10 normal
2003-03-21 3 Sirlei Aparecida Bortolotto 07:50 21:35 normal
2003-03-21 4 Valdemar Prestes 08:40 18:00 normal
2003-03-21 5 Getúlio Andrade 08:00 17:50 normal
2003-03-21 6 Aparecido Rangel ferias
2003-05-26 1 Jaime Fontenele de Abreu 08:00 17:30 normal
2003-05-26 2 Wilson Tadeu Bragança 08:00 17:40 normal
2003-05-26 3 Sirlei Aparecida Bortolotto 08:00 21:15 normal
2003-05-26 4 Valdemar Prestes externo
2003-05-26 5 Getúlio Andrade 08:00 18:00 normal
2003-05-26 6 Aparecido Rangel 18:00 plantao
2003-06-13 1 Jaime Fontenele de Abreu 08:00 17:30 normal
2003-06-13 2 Wilson Tadeu Bragança 08:10 19:00 normal
2003-06-13 3 Sirlei Aparecida Bortolotto 07:55 22:05 normal
2003-06-13 4 Valdemar Prestes 08:30 20:50 normal
2003-06-13 5 Getúlio Andrade 08:00 18:00 normal
2003-06-13 6 Aparecido Rangel ferias
2003-06-30 1 Jaime Fontenele de Abreu licenca
2003-06-30 2 Wilson Tadeu Bragança externo
2003-06-30 3 Sirlei Aparecida Bortolotto 08:00 23:40 normal
2003-06-30 4 Valdemar Prestes 08:30 18:15 normal
2003-06-30 5 Getúlio Andrade 08:00 18:00 normal
2003-06-30 6 Aparecido Rangel 18:00 plantao

Pergunta 6

Traga os depoimentos do inquérito 14 que a pergunta do doutor queria de verdade: cada folha, com o nome de quem depôs, se foi juntada, quando entrou na máquina e com que login.

Ver as dicas do jogo
  1. O inquérito 14 não existe mais, mas a tabela `depoimento` guarda o número da ocorrência em cada folha. Traga, dos depoimentos com `ocorrencia_id` 14, em ordem de `momento`: o `momento`, o `nome` de quem depôs, tirado da tabela `pessoa`, o `juntado`, o `digitado_em`, o `login` de quem digitou, tirado da tabela `usuario`, e o `texto`.
  2. Leia a consulta do doutor de fora para dentro: o `FROM` e o primeiro `JOIN` estão certos. No segundo, veja que coluna de `depoimento` ele usou para achar o login: quem digitou a folha está em `digitado_por`.
  3. Escreva: `SELECT depoimento.momento, pessoa.nome, depoimento.juntado, depoimento.digitado_em, usuario.login, depoimento.texto FROM depoimento INNER JOIN pessoa ON pessoa.id = depoimento.pessoa_id INNER JOIN usuario ON usuario.id = depoimento.digitado_por WHERE depoimento.ocorrencia_id = 14 ORDER BY depoimento.momento;`
Ver a consulta que resolve
SELECT depoimento.momento, pessoa.nome, depoimento.juntado, depoimento.digitado_em, usuario.login, depoimento.texto FROM depoimento INNER JOIN pessoa ON pessoa.id = depoimento.pessoa_id INNER JOIN usuario ON usuario.id = depoimento.digitado_por WHERE depoimento.ocorrencia_id = 14 ORDER BY depoimento.momento;

Os dois `JOIN` aqui saem da mesma gaveta, `depoimento`, para duas gavetas diferentes: um vai buscar o nome de quem depôs, o outro o login de quem digitou. A ocorrência 14 não existe mais, mas o número dela continua escrito em cada depoimento, e o `WHERE` acha por esse número.

Resultado

momento nome juntado digitado_em login texto
1997-08-22 18:40 Rubens Sanches 1 2001-02-19 sbortolotto eu vinha devagar porque a descida da Estrada do Café é ruim; pisei no freio antes da curva e o pedal foi ao fundo. O freio estava dando trabalho fazia tempo e eu já tinha falado isso na garagem.
1997-08-25 10:15 Ademir Falcão 1 2001-02-19 sbortolotto a manutenção estava em dia, a Kombi foi à oficina em junho e voltou liberada. Não recebi reclamação nenhuma do motorista nem da escola.
1997-08-26 14:00 Rute Beltrão 1 2001-02-19 sbortolotto eu estava no portão da escola quando a Kombi saiu, quatro e vinte da tarde, com dezenove crianças dentro. O veículo tem doze lugares e isso todo mundo aqui sabe.
1997-09-02 09:30 Lidiane Sardinha 1 2001-02-19 sbortolotto eu ia sentada no corredor porque não tinha banco para todo mundo. Quando bateu eu não vi nada, só lembro da perna e do barulho das crianças.
1997-09-04 15:10 Marlene Sardinha 1 2001-02-19 sbortolotto minha filha voltou operada de Londrina e vai mancar para o resto da vida. Eu quero saber quem responde por isso e até hoje ninguém me respondeu.
1997-09-11 16:00 Sebastião Gouveia 0 2001-02-19 sbortolotto condenei o sistema de freio dessa Kombi em 12 de junho de 1997, anotei na ordem de serviço e avisei o proprietário pessoalmente. Não fizeram o serviço.

Quem foi

Ver o culpado e a prova

O culpado é Sirlei Aparecida Bortolotto.

As provas que fecham o caso:

  • O ponto da Dona Sirlei em 19 de março de 2002, noite de baixa: saída às 22h10.
  • O ponto da Dona Sirlei em 12 de agosto de 2002, noite de baixa: saída às 21h05.
  • O ponto da Dona Sirlei em 24 de outubro de 2002, noite de baixa: saída às 21h40.
  • O ponto da Dona Sirlei em 5 de novembro de 2002, noite de baixa: saída às 21h20.
  • O ponto da Dona Sirlei em 21 de março de 2003, noite de baixa: saída às 21h35.
  • O ponto da Dona Sirlei em 26 de maio de 2003, noite de baixa: saída às 21h15.
  • O ponto da Dona Sirlei em 13 de junho de 2003, noite de baixa: saída às 22h05.
  • O ponto da Dona Sirlei em 30 de junho de 2003: saída às 23h40. O inquérito 14 foi baixado às 23h14.
  • O depoimento do Rubão no inquérito de 1997, digitado com o login sbortolotto em 19 de fevereiro de 2001.
  • O depoimento do Seu Ademir no inquérito de 1997, digitado com o login sbortolotto em 19 de fevereiro de 2001.
  • O depoimento da Dona Rute no inquérito de 1997, digitado com o login sbortolotto em 19 de fevereiro de 2001.
  • O depoimento da Lidiane no inquérito de 1997, digitado com o login sbortolotto em 19 de fevereiro de 2001.
  • O depoimento da Marlene no inquérito de 1997, digitado com o login sbortolotto em 19 de fevereiro de 2001.
  • O depoimento do Seu Tião no inquérito de 1997, digitado com o login sbortolotto em 19 de fevereiro de 2001, o único que nunca foi juntado aos autos.
  • A Dona Sirlei saiu às 23h40 na noite em que o 14 foi baixado, e foi o login dela que digitou a folha do Seu Tião, a que nunca entrou nos autos.

Você não precisou chamar ninguém. Dona Sirlei estava na porta da sala do arquivo com a bolsa no ombro, como quem já ia embora, e ficou.

Contou de trás para frente, porque de frente para trás não dava: o prazo do promotor; a queixa da Marlene, em 2002, que ela mesma datilografou com o nome do Falcão; um homem educado que apertou a mão dela numa festa e agradeceu sem dizer por quê; e uma folha de 1997 que o doutor Nicanor mandou segurar até segunda ordem. Disse também que a caixa de folhas rasgadas que o Seu Jaime tirou da lixeira em fevereiro era dela: antes de baixar cada registro, ela imprimia, lia de novo e rasgava.

No balcão, disse: aqui tudo fica escrito. Quase tudo. Tirou da bolsa um envelope pardo com a folha original — o depoimento do Seu Tião, de 11 de setembro de 1997 — e pediu protocolo.

Seu Jaime molhou o carimbo e não conseguiu ler o número. Você leu por ele, em voz alta: quatrocentos e um. Ele carimbou a folha do Seu Tião e prendeu na pasta do inquérito 14, atrás das outras cinco, onde ela devia estar desde setembro de 1997.

A Dona Sirlei assinou o termo com a caneta que tirou do cabelo. Vai responder por inserção de dados falsos e por prevaricação. Ninguém aplaudiu.

O doutor trocou a senha no mesmo dia. A Lidiane passou no balcão à tarde, recebeu uma cópia da folha do Tião e não disse nada. O Seu Ademir não foi indiciado hoje.

No fim do expediente, o papel que ficava embaixo do teclado do doutor desde 2001, com a senha escrita, estava amassado na lixeira da sala do arquivo, a mesma de onde o Seu Jaime tirou em fevereiro a caixa de folhas rasgadas.