diff --git a/src/main/java/br/ufpr/c3sl/estacaojuventude/Programa.java b/src/main/java/br/ufpr/c3sl/estacaojuventude/Programa.java
index 2f88d3a57f136d8c6f5c7f3b4d9bed0c74fe156a..b692d0006efa7fc070f07fa84a7181e9c88bc46a 100644
--- a/src/main/java/br/ufpr/c3sl/estacaojuventude/Programa.java
+++ b/src/main/java/br/ufpr/c3sl/estacaojuventude/Programa.java
@@ -133,32 +133,19 @@ public class Programa {
      * 
      */
     public static List<Programa> findWithParameters(String nomeOficial, String nomeMunicipio, Set<Tematica> tematicas) {
-    	String querySelectFrom = "SELECT distinct p.* FROM programa p, ocorrencia_municipal o";
-    	String queryWhere = " WHERE p.status = 'Efetivo' AND o.status = 'Efetivo'";
+    	String querySelect = "SELECT distinct p.*";
+    	String queryFrom = " FROM programa p";
+    	String queryWhere = " WHERE p.status = 'Efetivo'";
     	String query = "";
     	    	
-    	if (tematicas.isEmpty()) {		
-    		if (nomeOficial != null && nomeMunicipio == null){
-    			queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')";
-    		}
-    		else if (nomeOficial == null && nomeMunicipio != null){
-    			querySelectFrom += ", municipio m";
-    			queryWhere += " AND o.municipio = m.id";
-    			queryWhere += " AND p.id = o.programa_vinculado AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')";
-    		}
-    		else if (nomeOficial != null && nomeMunicipio != null) {
-    			querySelectFrom += ", municipio m";
-    			queryWhere += " AND o.municipio = m.id";
-    			queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')";
-    			queryWhere += " AND p.id = o.programa_vinculado AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')";
-    		}
-    	}
-    	else { //(!tematicas.isEmpty())
-    		querySelectFrom += " ,programa_tematicas pt, tematica t";
+    	if (!tematicas.isEmpty()) {
+    		queryFrom += " ,programa_tematicas pt, tematica t";
     		queryWhere += " AND p.id = pt.programa AND t.id = pt.tematicas";
-    		String strTemas = "(";
+    		
     		Integer i = 0;
     		Integer tam = tematicas.size();
+    		
+    		String strTemas = "(";
     		for (Iterator<Tematica> t = tematicas.iterator(); t.hasNext();) {
 				strTemas += "t.nome = '"+t.next().getNome()+"'";
 				i++;
@@ -166,29 +153,23 @@ public class Programa {
 					strTemas += " OR ";
     		}
     		strTemas += ")";
-    		if (nomeOficial == null && nomeMunicipio == null){
-    			queryWhere += " AND "+strTemas;
-    		}
-   			else if (nomeOficial != null && nomeMunicipio == null) {
-   				queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')";
-   				queryWhere += " AND "+strTemas;
-   			}
-   			else if (nomeOficial == null && nomeMunicipio != null) {
-    			querySelectFrom += ", municipio m";
-    			queryWhere += " AND o.municipio = m.id";
-   				queryWhere += " AND p.id = o.programa_vinculado AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')";
-   				queryWhere += " AND "+strTemas;
-   			}	
-   			else if (nomeOficial != null && nomeMunicipio != null) {
-    			querySelectFrom += ", municipio m";
-    			queryWhere += " AND o.municipio = m.id";
-   				queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')";
-   				queryWhere += " AND p.id = o.programa_vinculado AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')";
-   				queryWhere += " AND "+strTemas;
-   			}
+    		queryWhere += " AND "+strTemas;
     	}
-    	query = querySelectFrom + queryWhere;
-        return entityManager().createNativeQuery(query, Programa.class).getResultList();
+    	
+    	if (nomeOficial != null){
+			queryWhere += " AND LOWER(p.nome_oficial) LIKE LOWER('%"+nomeOficial+"%')";
+		}
+    	
+    	if (nomeMunicipio != null){
+    		queryFrom += ", ocorrencia_municipal o, ocorrencia_municipal_municipios om, municipio m";
+			queryWhere += " AND o.status = 'Efetivo'";
+			queryWhere += " AND p.id = o.programa_vinculado AND o.id = om.ocorrencia_municipal AND om.municipios = m.id";
+			queryWhere += " AND LOWER(m.nome) LIKE LOWER('%"+nomeMunicipio+"%')";
+		}
+    	
+    	query = querySelect + queryFrom + queryWhere;
+
+    	return entityManager().createNativeQuery(query, Programa.class).getResultList();
     }
     
 }