I make a query base on sample database chinook.db (https://www.sqlitetutorial.net/sqlite-sample-database/) below, but the result is strange.
-- SQLite version 3.30.1 2019-10-10 20:19:45
select
    Total,
    TotalSaleValue
from invoices
natural join (
    select
        InvoiceId,
        sum(UnitPrice) as TotalSaleValue
    from invoice_items
    group by InvoiceId
)
where Total != TotalSaleValue;
-- Output
Total       TotalSaleValue
----------  --------------
13.86       13.86
13.86       13.86
13.86       13.86
13.86       13.86
13.86       13.86
13.86       13.86
13.86       13.86
13.86       13.86
13.86       13.86
13.86       13.86
...
I use where Total != TotalSaleValue to filter the unequal values, and I expect to have the empty row.
But, the result shows Total and TotalSaleValue with the same value?!
Total is the value from invoices table, and the value of TotalSaleValue is calculated from invoice_items table which is the sum of the UnitPrice of each invoice.
-- invoice_items Table
InvoiceLineId  InvoiceId   TrackId     UnitPrice   Quantity
-------------  ----------  ----------  ----------  ----------
1              1           2           0.99        1
2              1           4           0.99        1
3              2           6           0.99        1
4              2           8           0.99        1
5              2           10          0.99        1
6              2           12          0.99        1
7              3           16          0.99        1
8              3           20          0.99        1
9              3           24          0.99        1
10             3           28          0.99        1
-- invoices Table
InvoiceId   ...         CustomerId  Total
----------  ----------  ----------  ----------
1           ...         2           1.98
2           ...         4           3.96
3           ...         8           5.94
4           ...         14          8.91
5           ...         23          13.86
6           ...         37          0.99
7           ...         38          1.98
8           ...         40          1.98
9           ...         42          3.96
10          ...         46          5.94
Does anyone know what's wrong with my query?
Update:
I found that the result would be correct if I cast the Total and TotalSaleValue to TEXT and give the alias name X and Y.
select
    cast(Total as text) as X,
    cast(TotalSaleValue as text) as Y
from invoices
natural join (
    select
        InvoiceId,
        sum(UnitPrice) as TotalSaleValue
    from invoice_items
    group by InvoiceId
)
where X != Y;
