Further to solution 1 if you want to change the columns that you search on then pass the name of the column into the procedure and build some dynamic sql e.g.
DECLARE @dynSql as varchar(max)
SET @dynSql = 'select A.ID, A.FirstName,A.LastName,A.Gender,A.Mobile,A.Email,A.ValidPassport,A.Sources,'
SET @dynSql = @dynSql + 'A.JoinDate,B.XthPercentage,B.XIIthPercentage,B.GCourse, B.GPercentage,B.PGCourse,B.PGPercentage '
SET @dynSql = @dynSql + 'from tblPersonalDetails A Inner Join tblEducationalDetails B on A.ID=B.ID '
SET @dynSql = @dynSql + 'where A.' + @colName + ' like ''%' + @search + '%'''
then you can
sp_execute[
^] the statement.
Note I've also used aliases for the tables to shorten the query into a readable state