Is Jakarta Airport (JKT) the same as Soekarno-Hatta Airport (CGK)? If so, why is the code different? If the two codes means the same thing, why do some airport booking systems use JKT and some others CGK?
JKT was the first Jakarta's airport, closed in 1985 and replaced by Halim Perdanakusuma (HLP) and Cengkareng/Sukarno-Hatta (CGK).
JKT is simply a short for Jakarta as a destination; some booking site could be using it in case you simply want to fly to Jakarta regardless of the airport.
Another example, Milano has two own airports plus Malpensa, for a total of three: in some sites you can choose to fly to MIL, itself not being the code of any airport in Milano.
IATA is the governing body for the short codes for airports.
Jakarta International Airport (Soekarno-Hatta) is the main airport serving the greater Jakarta area on the island of Java, Indonesia.
Its IATA code, CGK originated from the word Cengkareng, a sub-district located to the northwest of the city, and the original name of the airport.
Today, CGK has been maintained as the base airport, and JKT (used to be Kemayoran, before Halim Perdanakusuma (HLP)) is used to refer to any Jakarta airport - both (JKT-CGK and JKT-HLP).
Another example: LON (London) can refer to multiple airports - Heathrow (LHR), City (LCY), Luton (LTN), Stansted (STN), Gatwick (LGW), Biggin Hill (BQH), and Southend (SEN).
Practically, it's used for booking only, referring to all airports in Jakarta, as people usually don't care which airport they fly into.
It's like NYC as an umbrella for JFK, LGA and EWR, or TYO for NRT and HND. You are never going to fly into "NYC", as this airport doesn't exist. However, when you book a ticket to New York, you probably don't care much about whether you land in JFK, La Guardia or Newark. In this case, you would probably search for flights to NYC so that you would get flights to all three airports, instead of having to do three different queries.