I would suggest studying SQL a little more and trying to understand each part of the SELECT statment in more detail because you clearly don't understand what it happening.
I'll try to break down the SELECT for you quickly.
This is the basic structure
SELECT [columns] FROM [tables] WHERE [whereclause]
So, [columns] is telling the query what information to put into each row. [tables] is telling the query where to get the data. [whereclause] is telling the query what data to get the information from.
So, here's what the SELECT statement is actually doing. You're saying, that each row will have two columns, customer.name and Last(person.number). This means that for any of the data it returns, each row will show the customer name and the last value in the person.number column. That will go in every row returned.
Then, you tell it to get the data from customer and person and return a row for each time that the id's match.
What you need to do is specify that you only want to return the one row, not every row.
Henry's suggestion won't work because you can't have aggregate functions in the where clause but if could be modified to something like:
SELECT customer.name, person.number
FROM customer, person
WHERE (customer.id=person.id AND
person.number=(SELECT Last(person.number) FROM person))