The tables are tiny. The page counts in your tables are:
11, 8, 6, 5, 13, 8, 10
They occupy 480kb in total. There is quite literally nothing to defrag.
Edit: This warrants a little more explanation.
A new table or index is usually allocated it's first 8 pages from a mixed, rather than uniform extent. So, it's possible for each of the first 8 pages to be allocated from different mixed extents. A table or index consuming 8 pages could therefore have 8 fragments, 1 on each of 8 different mixed extents.
The more widely used defrag scripts (a couple of examples linked below) tend to exclude small tables because of this. IIRC, <500 pages is in one or both of them. At these sizes, there is very little benefit to defragmenting and the fragmentation figures are potentially skewed by the mixed extent allocations.
Updates on data already there causes rows to be moved and forward pointers added
In this test, we can get 65% fragmentation on 115k densely packed rows
CREATE TABLE #FragTest (
FragTestID int NOT NULL IDENTITY PRIMARY KEY,
SomeString varchar(4100) NULL
);
INSERT #FragTest (SomeString) VALUES ('a');
GO
INSERT #FragTest (SomeString)
SELECT F1.SomeString FROM #FragTest F1 CROSS JOIN #FragTest F2;
GO 4
INSERT #FragTest (SomeString) SELECT F1.SomeString FROM #FragTest F1
GO 6
SELECT COUNT(*) FROM #FragTest
SELECT object_id, avg_fragmentation_in_percent, page_count
FROM sys.dm_db_index_physical_stats(2, OBJECT_ID('tempdb..#FragTest'), NULL, NULL, NULL);
UPDATE #FragTest
SET SomeString = REPLICATE('b', 4100)
WHERE FragTestID < 10000 AND FragTestID % 3 = 0
SELECT object_id, avg_fragmentation_in_percent, page_count
FROM sys.dm_db_index_physical_stats(2, OBJECT_ID('tempdb..#FragTest'), NULL, NULL, NULL);
UPDATE #FragTest
SET SomeString = REPLICATE('c', 4100)
WHERE FragTestID < 10000 AND FragTestID % 3 = 1
SELECT object_id, avg_fragmentation_in_percent, page_count
FROM sys.dm_db_index_physical_stats(2, OBJECT_ID('tempdb..#FragTest'), NULL, NULL, NULL);
UPDATE #FragTest
SET SomeString = REPLICATE('d', 4100)
WHERE FragTestID < 10000 AND FragTestID % 3 = 2
SELECT object_id, avg_fragmentation_in_percent, page_count
FROM sys.dm_db_index_physical_stats(2, OBJECT_ID('tempdb..#FragTest'), NULL, NULL, NULL);
Edit, sorry, browser trouble
If you change the middle replicate to 2000 you get <5% at the end. This happens because there is free space from moved rows in the first update
Best Answer
Fragmentation values are meaningless for small tables.
An empty (or emptied) table is small.
Small is determined by how many 8k data pages are allocated to it.
For example, see this question: Why is my database still fragmented after I rebuilt and reindexed everything?