SELECT
    ref.nome_cidade AS cidade_referencia, 
    c.id_chave_cidade,
    c.nome_cidade,
    c.latitude,
    c.longitude,
    (
        6371 * ACOS(
            COS(RADIANS(ref.latitude)) * COS(RADIANS(c.latitude)) *
            COS(RADIANS(c.longitude) - RADIANS(ref.longitude)) +
            SIN(RADIANS(ref.latitude)) * SIN(RADIANS(c.latitude))
        )
    ) AS distancia_km
FROM cidades c
JOIN estados e ON c.id_estado = e.codigo_ibge
JOIN cidades ref ON ref.nome_cidade = 'Campinas' 
    AND ref.id_estado = (SELECT codigo_ibge FROM estados WHERE sigla_estado = 'SP')
HAVING distancia_km <= 11000
ORDER BY distancia_km
;


#SELECT 
#    c.id_chave_cidade,
#    c.nome_cidade,
#    c.latitude,
#    c.longitude,
#    (
#        6371 * ACOS(
#            COS(RADIANS(ref.latitude)) * COS(RADIANS(c.latitude)) *
#            COS(RADIANS(c.longitude) - RADIANS(ref.longitude)) +
#            SIN(RADIANS(ref.latitude)) * SIN(RADIANS(c.latitude))
#        )
#    ) AS distancia_km
#FROM cidades c
#JOIN estados e ON c.id_estado = e.id_chave_estado
#JOIN cidades ref ON ref.nome_cidade = 'Campinas' 
#    AND ref.id_estado = (SELECT id_chave_estado FROM estados WHERE sigla_estado = 'SP')
#HAVING distancia_km <= 100 
#ORDER BY distancia_km;

