Código PHP:
Ver original$query = "SELECT id_persona, siglas, nombre, paterno, materno
FROM dir_titulo
LEFT JOIN dir_persona USING (id_titulo)
WHERE id_adscripcion LIKE '".$dr."%' order by id_persona;";
$query2 = "SELECT id_persona, puesto, id_adscripcion
FROM dir_puesto
LEFT JOIN dir_persona USING (id_puesto)
WHERE id_adscripcion LIKE '".$dr."%' order by id_persona";
Esas dos consultas son diferentes, tu las usas como si retornaran los mismos valores pero la realidad es que una puede retornar un numero de resultados diferente de la otra.
El problema no es el registro 10009 o el que sea, el problema es que las dos consultas no son consistentes entre si, explota en ese numero pero podria explotar en cualquier otro y es solo una mera casualidad que no halla explotado antes.
Cuando trabajas con dos consultas paralelas que requieren ser consistentes, la mejor alternativa simpre es fucionarlas en una sola, de esta forma, es la base de datos la que revisa toda la integridad y te asegura que no ocurriran cosas como estas.
Código PHP:
Ver original$query = "SELECT DISTINCT
id_persona, siglas, nombre, paterno, materno, puesto, id_adscripcion
FROM
dir_titulo
LEFT JOIN
dir_persona ON dir_titulo.id_titulo = dir_persona.id_titulo
LEFT JOIN
dir_puesto ON dir_puesto.id_puesto = dir_persona.id_puesto
WHERE
id_adscripcion LIKE '".$dr."%' order by id_persona;";
Con esa consulta obtendrás los datos sin errores, no obstante, podrias considerar usar INNER en lugar de LEFT, desconociendo tus estructuras puede que no sea viable, pero si es posible te convendría hacerlo para evitar valores nulos.