Mira bien esto:
Código MySQL:
Ver originalINSERT INTO medicos
(num_colegiado
, id_persona
, id_especialidad
) ('$colegiado', personas.$id_persona, '$rowesp(especialidad)' )
¿Ves ese "personas.$id_persona"? Bueno esto hace que cuando la consulta queda creada queda algo como "personas.2".
¿Por qué incluiste ese "personas."?