First, for future forum searchers, could you edit the thread title to "What's the difference between free tables and database tables?"
The TLDR; answer is the database node lists DBC files and their tables (DBF files) are a hierarchy level below. While the node of free tables in the project manager lists all DBFs that don't belong to a DBC. If you want a fuller picture, read on.
It all has to do with how FoxPro evolved. Let's begin with some terminology.
At first there only were free tables in FoxPro, they were called databases, actually the file extension DBF means DataBase File. They actually are just tables, not databases, as a database in the overarching computer science and information technology terminology is the hierarchy level for a set of multiple tables and views, stored procedures and more. So there can be a root of confusion no matter if you start learning in VFP9 and don't have a background knowledge in old FoxPro or FoxBase or even dBase versions, or if you actually do know the term from having knowledge about the older versions. The DBF extension actually came from dBase.
The essence of that is that database is a term with two meanings in FoxPro. Today it's used as the project manager uses it. As you are referring to the project manager treeview of Data, we can now connect that with a look at a project you also have in the Samples folder of Foxpro, the Solution project (solution.pjx):
Screenshot 1 - The Project manager Data tab of the Solution Project
You see the solution project has three databases dvds, newid, and testdata. They are not DBFs, databases in the sense of the old FoxPro versions, they are database containers, file extension DBC. I don't remember which version introduced DBCs, but I guess it was the first Windows version that Microsoft developed after acquiring FoxPro from Fox Software.
Still, Foxpro developer jargon also changed the term for DBFs from database to table and thus a database container actually better would be described as a table container, as that's what a database is, in short. But then the normal term for a table container is database and thus we just usually drop the "container" detail and call a DBC a database, just like the project manager does. And when you look into the folders of the solution project you'll see that the tables of say the testdata database are DBF files, just like the free tables are. They just belong to a DBC:
Screenshot 2 - database tables on the file level
Free tables in the Solution project point to this folder (don't be confused tables are in a File system folder called Graphics):
Screenshot 3 - free tables on the file level
The way other database systems (RDBMS) technically store tables in databases is having a database file, which includes tables. Even just talking of Microsoft products that's not only true for database servers, but also for another file based database of Microsoft: Access. And what's the difference anyway, if a "real" database server stores its databases and tables of the databases in files, anyway. What's making them a server is that they are a service to which you connect to and use the service, not directly the tables. But that's going off topic.
So to get back to the core of your question, that should now be clear. I already pointed out in above screenshots 2 and 3 how free tables and database tables are both DBFs in the file system. Differences are in the files, but that's the least important to know.
In anticipation of upcoming questions I could already point out this and other technical differences. I would like to refer to the VFP help, but I don't find a single help topic that covers all the differences. The differences of free and database tables are scattered within the help in single aspects, for example the topic "How to: Name Fields" says in its second sentence:
VFP help said:
For free tables, field names can be up to 10 characters long. For database tables, field names can be up to 128 characters long.
That's not the only difference and also not the most important advantage of database tables, as field names are not limiting how you can caption grid headers or labels in forms. Other details to mention are default values are only possible for fields in database tables, not in free tables. And within the default values, you can use FoxPro functions but more to the point also stored procedures which is code stored in the DBC. And on top of that operations on database tables, both xBASE command APPEND, REPLACE, DELETE and SQL-Statements Insert, Update, Delete and even manually using Browse Window and CTRL+Y or editing fields or using the deletion mark of the browse window, cause triggers that also are usually stored in stored procs and can do things like complex rule checks for referential integrity of data in relation to other tables. Checking whether a foreign key value you set to a foreign key field of a table actually does find a record in the referenced table with that foreign key as its primary key. But triggers are also free to use for more aspects. An insert trigger of an order could also add records for shipping history and other things automatically, for example, like having a start record of "order placed" and that in turn could trigger (technically or just in terms of the workflow) users of an order system to start packaging and processing the order. Limits are only your imagination of what to do with the call of a trigger.
Before others tell it, the most given reason against DBCs is that free table access is faster and I doubt that it's a very heavy difference, because a DBC in itself is just a table, a free table. So USE tablename instead of USE freetablename.dbf differs in that the first needs DBC access, too, for file location, long field names, etc. So, of course, there is an overhead in using database tables, it just becomes neglectable at least when you have the DBC local. But caution, that introduces difficulties with upgrading DBCs, location of DBC and DBFs, so only start using this idea when you know what you'll have to deal with in the software lifecycle of upgrades, configuration of network shares and more. With a separate DBC and local DBC for each user (which usually only is recommended for a DBC of views - for the same reasons but with less side effects), concurrent access to that file is not needed and that's just one building block of dealing with the performance problem you may or may not even encounter using DBCs.
So to make it clear: I recommend using databases (DBC) to have a fuller set of features that matches up with what database servers offer. And you don't need to worry about the caution warning above, if the DBC is just in the share with its DBFs. In a well configured network you also will not have much difficulties about the shared access to the DBC along with DBF file access.
One further conclusion: If you inherit code that uses free tables, it's not hard to change to a DBC, as you're not forced to open a table of a DBC with it's database long table name or the syntax including the exclamation mark (USE database!tablename), you can still USE filename.dbf, when a free DBF is made to a database table by the ADD TABLE command. You can still have the same USE and SQL-Selects pointing to the DBF files. Every DBF of a DBC knows its DBC and the first DBF of a DBC you open directly will open its DBC, too, to know its own long field names and default values etc. Further usage of other database tables from the same DBC also still with a direct USE filename.dbf will find the DBC is already open and cause no more overhead about that. Just as long as there is also old EXEs and DLLs that work on the free tables with older runtimes they force to use, they will lose the ability to access the modified DBFs, as their header changes with an added backlink to the DBC file they belong to. (There's a hint of a problem you may get with DBC tables and a DBC that's local with DBFs being on a central share).
Sorry for the long post, I could have get it done with just pointing out it's the difference of DBFs belonging to a DBC and standalone DBFs, which I added as TLDR; at the start. I made quite some excursions and pointed out details you don't need to know right away. If you are using free tables up until now, you may like some of the advantages, like default values that could produce a primary key other than an autoinc integer. Triggers that ay cause automatic cascades of operations in further tables, etc. On the other side, if you don't have the time for the learning curve about actually making use of all the added features, you could stay with all free tables and be backed by many other experts still preferring them over database tables.
Chriss