Si te fijas en la consulta que te pase, hay dos INNER uno para extraer el origen y otro para el destino, al ser la misma tabla, se le asigna un alias ( O de origen y D de destino) en los campos a seleccionar al ser el mismo campo (localidad) también se le debe de asignar un alias para diferenciarlos ( origen y destino) quizás te quede más claro con AS aunque es totalmente prescindible.
Código SQL:
Ver originalSELECT
transacciones.TO,
transacciones.obs,
O.localidad AS origen,
D.localidad AS destino
FROM transacciones
INNER JOIN localidades AS O ON transacciones.inicio_id=O.id
INNER JOIN localidades AS D ON transacciones.destino_id=D.id
WHERE
transacciones.tipo_ticket_id=14
AND transacciones.fecha='xxxx-xx-xx'
AND transacciones.inicio_id=x
AND transacciones.destino_id=x