SQL is producing CROSS JOIN but I want INNER JOIN (records being multiplied) SELECT *
  FROM        GRNHISTORY GR
  inner Join Inventorytransferlog itl on GR.ReferenceEntryID=itl.ReferenceEntryID


Both tables GRNHISTORY and Inventorytransferlog have their own ID column and unique ids. But we did not need it nor are we using it.
ReferenceEntryID is a foreign key from another table. Both tables have 10 records. Now when I run this query it shows me 100 records which I seem not to be able to understand. It should be showing 10 records as per my understanding. Please correct me where I am wrong.
The answer becomes obvious when valid values are inserted for the PRIMARY KEYs of the two tables you are joining and you look at the results:

An example:  

The two tables:

CREATE TABLE fred (int_1 INTEGER, ref1 INTEGER);   -- equivalent of GRNHISTORY
CREATE TABLE bill (int_2 INTEGER, ref2 INTEGER);   -- of Inventorytransferlog


The data:  

INSERT INTO fred VALUES (1, 55), (2, 56), (3, 57);
INSERT INTO bill VALUES (21, 55), (22, 56), (23, 57); 
       -- NOTE: only 1 matching value of the JOINing refrerence field per table!
       -- and NOTE: different PRIMARY KEYs for the two tables! 


The (your) SQL:  

SELECT * FROM fred f
INNER JOIN bill b ON f.ref1 = b.ref2


The result (and fiddle):  

int1 ref1 int2 ref2
   1   55   21   55
   2   56   22   56
   3   57   23   57


But, if the data is now changed as follows: 

INSERT INTO fred VALUES (1, 55), (2, 55), (3, 55);
INSERT INTO bill VALUES (21, 55), (22, 55), (23, 55);  

       -- NOTE: 55 - ALL the values of JOINing reference columns in each record match!


Note that the joining field now has the same value in both tables for all records, then run the same SQL as above. Result (and fiddle):

  int1  ref1 int1 ref2
    1   55  21  55
    2   55  21  55
    3   55  21  55
    1   55  22  55
    2   55  22  55
    3   55  22  55
    1   55  23  55
    2   55  23  55
    3   55  23  55


And the result is a 9 (i.e. 3 x 3) records (effective) CROSS JOIN because your data makes it so! Because you've asked the SQL to JOIN on very common values in BOTH tables so therefore you can expect a lot of records in the result!

You can check this out by doing a 

SELECT COUNT(DISTINCT(ref1)) AS distinct_ref FROM fred;


answer = 1, (and the same result for bill with ref2).  

I'm willing to bet that in your tables where you are getting a CROSS JOIN (or something very similar), that the SQL above using the ReferenceEntryID will get you very low counts (which also match in both tables) leading to many matching records in your SELECT.

There's the explanation for your apparent multiplication or CROSS JOIN - you have too many matching records in both tables - et voilà!