Relational Database design best practice
Problems involving classes and subclasses (or, if you prefer, types and subtypes) come up all the time in database design.  Your situation looks like a case in point.  

In your case, here's what I would do, using a technique called Class Table Inheritance combined with a technique called Shared Primary key.

Create three tables:  Contacts, Professors, and Students.  Use the autonumber feature for the ID field of the Contacts table.  Have an ID field in the other two tables, but do not use the autonumber feature.  Instead, whenever you insert a new Contact, obtain the ID field just generated for the new contact, and provide that ID field as the value for ID in either Professors or Students.  The ID field is declared as the primary key in all three tables. You can even create a Contact that is both a student and a professor, if that makes sense in your situation.  

You place other attributes in the appropriate table, according to the attribute, as you have suggested.

ID is guaranteed to be unique in all three tables.  If you want data about only students, join Contacts and Students matching on the ID field.  Likewise for data about professors.

Using shared primary key in this way enforces the 1:1 nature of the relationships between Students or Professors and Contacts.

Good luck!