diff --git a/docente_por_formacao.sql b/docente_por_formacao.sql
new file mode 100644
index 0000000000000000000000000000000000000000..bcb97bf696fe36b0b92086087232ff1c20686426
--- /dev/null
+++ b/docente_por_formacao.sql
@@ -0,0 +1,82 @@
+/*
+Copyright (C) 2016 Centro de Computacao Cientifica e Software Livre
+Departamento de Informatica - Universidade Federal do Parana - C3SL/UFPR
+
+This file is part of HOTMapper.
+
+HOTMapper is free software: you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation, either version 3 of the License, or
+(at your option) any later version.
+
+HOTMapper is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with HOTMapper.  If not, see <https://www.gnu.org/licenses/>.
+*/
+
+-- depends: docente, turma
+-- SimCAQ: tabela de docentes por formação --
+
+CREATE TABLE docente_por_formacao AS (
+
+WITH
+    docente_total AS
+        (SELECT COUNT(DISTINCT docente.id_docente) AS "total", docente.ano_censo AS ano_censo, estado.id AS estado_id,
+            municipio.id AS municipio_id, docente.dependencia_adm_id as dependencia_adm_id, '0' as tipo_formacao
+        FROM docente
+            INNER JOIN turma ON (docente.turma_id=turma.id AND docente.ano_censo=turma.ano_censo)
+            INNER JOIN estado ON (docente.escola_estado_id=estado.id)
+            INNER JOIN municipio ON (docente.escola_municipio_id=municipio.id)
+        WHERE ((docente.tipo_docente = 1 OR docente.tipo_docente = 5) AND (turma.tipo_turma_id <= 3))
+            AND (docente.ano_censo >= 2017) AND (docente.nivel_tipo_formacao IN (2, 3, 4, 5, 6, 7, 8)
+        GROUP BY docente.ano_censo, estado.nome, estado.id, municipio.nome, municipio.id, docente.dependencia_adm_id
+        ORDER BY docente.ano_censo ASC, estado.nome ASC, estado.id ASC, municipio.nome ASC, municipio.id ASC
+        ),
+    docente_medio AS
+        (SELECT COUNT(DISTINCT docente.id_docente) AS "total", docente.ano_censo AS ano_censo, estado.id AS estado_id,
+            municipio.id AS municipio_id, docente.dependencia_adm_id as dependencia_adm_id, '2' as tipo_formacao
+        FROM docente
+            INNER JOIN turma ON (docente.turma_id=turma.id AND docente.ano_censo=turma.ano_censo)
+            INNER JOIN estado ON (docente.escola_estado_id=estado.id)
+            INNER JOIN municipio ON (docente.escola_municipio_id=municipio.id)
+        WHERE ((docente.tipo_docente = 1 OR docente.tipo_docente = 5) AND (turma.tipo_turma_id <= 3))
+            AND (docente.ano_censo >= 2017) AND (docente.nivel_tipo_formacao IN (2, 3)
+        GROUP BY docente.ano_censo, estado.nome, estado.id, municipio.nome, municipio.id, docente.dependencia_adm_id
+        ORDER BY docente.ano_censo ASC, estado.nome ASC, estado.id ASC, municipio.nome ASC, municipio.id ASC
+        ),
+    docente_superior AS
+        (SELECT COUNT(DISTINCT docente.id_docente) AS "total", docente.ano_censo AS ano_censo, estado.id AS estado_id,
+            municipio.id AS municipio_id, docente.dependencia_adm_id as dependencia_adm_id, '4' as tipo_formacao
+        FROM docente
+            INNER JOIN turma ON (docente.turma_id=turma.id AND docente.ano_censo=turma.ano_censo)
+            INNER JOIN estado ON (docente.escola_estado_id=estado.id)
+            INNER JOIN municipio ON (docente.escola_municipio_id=municipio.id)
+        WHERE ((docente.tipo_docente = 1 OR docente.tipo_docente = 5) AND (turma.tipo_turma_id <= 3))
+            AND (docente.ano_censo >= 2017) AND (docente.nivel_tipo_formacao IN (4, 5)
+        GROUP BY docente.ano_censo, estado.nome, estado.id, municipio.nome, municipio.id, docente.dependencia_adm_id
+        ORDER BY docente.ano_censo ASC, estado.nome ASC, estado.id ASC, municipio.nome ASC, municipio.id ASC
+        ),
+    docente_especializacao_mestrado_doutorado AS
+        (SELECT COUNT(DISTINCT docente.id_docente) AS "total", docente.ano_censo AS ano_censo, estado.id AS estado_id,
+            municipio.id AS municipio_id, docente.dependencia_adm_id as dependencia_adm_id,
+            docente.nivel_tipo_formacao as tipo_formacao
+        FROM docente
+            INNER JOIN turma ON (docente.turma_id=turma.id AND docente.ano_censo=turma.ano_censo)
+            INNER JOIN estado ON (docente.escola_estado_id=estado.id)
+            INNER JOIN municipio ON (docente.escola_municipio_id=municipio.id)
+        WHERE ((docente.tipo_docente = 1 OR docente.tipo_docente = 5) AND (turma.tipo_turma_id <= 3))
+            AND (docente.ano_censo >= 2017) AND (docente.nivel_tipo_formacao IN (6, 7, 8)
+        GROUP BY docente.ano_censo, estado.nome, estado.id, municipio.nome, municipio.id, docente.dependencia_adm_id
+        ORDER BY docente.ano_censo ASC, estado.nome ASC, estado.id ASC, municipio.nome ASC, municipio.id ASC
+        )
+
+SELECT *
+FROM docente_total
+UNION ALL docente_medio
+UNION ALL docente_superior
+UNION ALL docente_especializacao_mestrado_doutorado;
+)