La primera corrección que te haría es recordarte que esa no es exactamente la sintaxis de un INNER JOIN, y además que debes tener en cuenta que las relaciones declaradas entre tablas es conveniente ponerlas en el FROM y no en el WHERE.
Por otro lado, no has usado alias, lo que complica un poco la lectura.
Pero el problema mayor, que te está causando duplicación de registros y además mucha lentitud es que estás haciendo un JOIN en estrella (una tabla central a N tablas), y eso es lo que genera ese producto cartesiano.
Para solventarlo estás haciendo un DISTINCT, pero eso es insuficiente porque de todos modos puede estar dando un resultado algo inconsistente.
El primer acercamiento sería:
Código MySQL:
Ver original B.id_beneficiario Id,
B.fecha_alta Alta,
B.nombre Nombre,
B.apepaterno PrimerApellido,
B.apematerno SegundoApellido,
B.edad Edad,
B.telefono Telefono,
B.celular Celular,
G1.nombre_grupos Grupo,
G.nombre Vertiente,
C.nombre_colonia Colonia,
GBN.nombre Mesa,
OU.nombre Actividad,
CA.estadoCatB
Estado
beneficiario B
INNER JOIN grupos_beneficiarios GB
ON B.id_beneficiario
= GB.id_beneficiario
INNER JOIN catstatusb CA
ON B.autorizado
= CA.estadoCatB
AND B.id_localidad
= L.id_localidad
) INNER JOIN grupos_beneficiarios_nivel GBN
ON GB.id_nivel_grupo
= GBN.id
INNER JOIN ocupacion_principal OP
ON B.id_ocupacion
= OP.id
INNER JOIN ocupacion_subgrupo OS
ON B.id_ocupacionsub
= OS.id
INNER JOIN ocupacion_unitario OU
ON B.id_ocupacion_uni
= OU.id
Como sugerencia, hay que definir un indice por beneficiarios.fecha_alta, como mínimo, para darle mejor performance. Pero eso será insuficiente si no pules las relaciones de modo que no se genere esa consulta en estrella, como te digo.