What is the difference between a routing table and a forwarding table?
In routers you normally have two separate planes, often called "control plane" and "forwarding plane".
The control plane is the "brain" of the router and handles things as management of the device and routing protocols among other things. It is sometimes called a "routing engine" or "supervisor" by vendors.
The forwarding plane is responsible for the actual packet forwarding. In bigger routers it is often implemented by specialized chips and very fast memory for route lookups.
The routing table (or more than one routing table) resides in the control plane. It contains routing information received through routing protocols (OSPF, BGP, ...) and from configuration (connected routes, static routes). There may be more than one entry for a given prefix if multiple routing information is received by the control plane.
From all these information the "best" path for a prefix is selected. This selection is then collected in the forwarding table. The forwarding table has the definitive destination information where a packet is routed for any given IP prefix (or MAC address depending on the layer). This forwarding table is then pushed into the forwarding plane of the router and often distributed into each linecard in bigger chassis based routers.
They definitely don't keep the same informations.
Routing table is a L3 table which states for X.X.X.X/Y IP destination, go through z.z.z.z router.
Forwarding table is a L2 table which states for communicating with z.z.z.z router, send packets to Mac Address aa:bb:cc:dd:ee:ff.
In your local network, you use the forwarding table to get the other hosts mac addresses and send them the packets. Your network device will have broadcast an arp whohas ip z.z.z.z tell ME packet at L2 to get the relevant mac address.
To communicate with a host in a different subnet, you should route it through a router within your local network. The routing table will tell which IP this router has. Which router you reach using the same forwarding mechanism as above.
Routing and Forwarding are distinct.
However, both routing table and forwarding table are used for Forwarding, according to RFC1812 Requirements for IP Version 4 Routers, RFC3222 Terminology for Forwarding Information Base (FIB) based Router Performance and RFC6115 Recommendation for a Routing Architecture.
The main difference is that forwarding tables are more compact and provide faster lookup than routing tables, since the latter need to maintain information(e.g. metric/cost) for routing protocol, and support update.
Forwarding an IP datagram generally requires the router to choose the address and relevant interface of the next-hop router or (for the final hop) the destination host. This choice, called relaying or forwarding depends upon a route database within the router. The route database is also called a routing table or forwarding table. The term "router" derives from the process of building this route database; routing protocols and configuration interact in a process called routing.
The forwarder determines the next hop IP address for the packet, usually by looking up the packet's destination in the router's routing table.
The forwarding information base is distinct from the "routing table" (or, the Routing Information Base), which holds all routing information received from routing peers.
The forwarding information base contains unique paths only (i.e. does not contain secondary paths).
Section 1.3 Abbreviations
FIB Forwarding Information Base: The forwarding table, used in the data plane of routers to select the next hop for each packet.
RIB Routing Information Base. The routing table, used in the control plane of routers to exchange routing information and construct the FIB.
Comment on el00ruobuob's answer
Tables that map IP addresses to MAC addresses are ARP tables, not forwarding tables.
Routing table in Linux kernel is called "Forwarding Information Base"!